1、#
#是将字母变成字符串的宏定义
用法:
#define N(a) #a
printf("%s",N(fdaf));
输出为fdaf。不可能做到将一个变量通过这个操作变成字符串(比如int a =5,不能N(a)得到“5”,得到的只是“a”),但是宏定义的常量可以。需要一个中间宏如下:
#define N(a) _N(a)
#define _N(a) #a
#define C 3
printf("%s",N(C));
输出是3,如果不用中间宏输出是C。
2、##
##是将两个字符串拼接在一起的宏定义
用法:
#define C(s1,s2) s1##s2
printf("%s","fda","134");
输出为fda134。同样不能通过这个宏将两个变量粘贴在一起(比如char *a="fad";char*b+"41";C(a,b),得到的只是“ab”),同样可以将宏定义的常亮粘贴在一起。同样使用中间宏:
#define C(s1,s2) _C(s1,s2)
#define _C(s1,s2) s1##s2
#define A "fda"
#define B "431"
printf("%s",C(A,B));
输出为fda431,如果不用直接报错。
3、#@
#@不是gcc支持的语法不介绍。