typeof获取数据类型
如:可以用于宏定义实现类似C++的重载函数功能
#include<stdio.h>
//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)=%d\n",max(a,b));
printf("max(c,d)=%f\n",max(c,d));
return 0;
}
结果:
C11关键字 _Generic
泛型关键字,允许使用还不确定的数据类型来定义变量
语法
_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为宏
结果: