_Generic 选项

C11 新增了 _Generic 选项,用于支持类似C++中多态的功能,可以理解为一种类似switch的选择判定,让编译器可以在编译的时候根据类型来选择使用。例如:

#define V_TYPE 0
#define WAT _Generic(V_TYPE, float: 2.0,     \
                             char *: "XD",   \
                             int: 10,        \
                             default: 'a')

上述代码中根据V_TYPE的类型判断WAT的定义,分别在float、char、int中搜索,如果没有匹配则使用默认的default。

现在可以使用该方式汇总 math.h 中定义有 cbrt、cbrtl、cbrtf 等函数,来实现多态型的cbrt用于同时支持多个数值类型。

#include <stdio.h>
#include <math.h>

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              float: cbrtf,       \
                              default: cbrt       \
                        )(X)

int main(void){
    double x = 8.0;
    const float y = 3.375;
    printf("cbrt(8.0) = %f\n", cbrt(x));  
    printf("cbrtf(3.375) = %f\n", cbrt(y));  

    return 0;            
}
本文来自投稿,不代表本站立场,如若转载,请注明出处:https://www.zfjsec.com/383.html
-- 展开阅读全文 --
纸飞机SEC—JAVA系列第一章第五节
« 上一篇 07-06
C#窗体程序增加全选与勾选的数据获取
下一篇 » 07-12

发表评论