如:可以用于宏定义实现类似C++的重载函数功能
#include//typeof获取数据类型 #define max(n1,n2)({ typeof(n1) max1=(n1); typeof(n2) max2=(n2); (void) (max1==max2); max1>max2?max1:max2;}) //(void) (max1==max2);数据类型不同时会发出警告 int main() { int a=5; int b=6; float c=4.5f; float d=4.6f; printf("max(a,b)=%dn",max(a,b)); printf("max(c,d)=%fn",max(c,d)); return 0; }
结果:
泛型关键字,允许使用还不确定的数据类型来定义变量
语法
_Generic((assignment-expression) typename:expression, typename:expression, ... default:expression) assignment-expression:赋值表达式,也可以认为是变量
//实现getTypename(var)函数,重载效果,var可以是任意类型的参数,功能是获取该参数的类型 #define GET_TYPENAME(var) _Generic((var), int:"int", char:"char", float:"float", double:"double", char *:"char *", default:"other type") //调用 int x; GET_TYPENAME(x);//GETTYPENAME为宏
结果:
typeof的用法
_Generic关键字



