[奇怪の东西]关于宏的那些事儿
看到一些关于宏的有意思的东西,记录一下。
关于宏定义中的 #,##,#@
一共就仨东西......
#将对应的变量字符串化,例如#define trace(x, format) printf(#x " = %" #format "\n", x),使用trace(i, d)就相当于printf("x = %d\n", x);##将把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符,例如#define trace2(i) trace(x##i, d),使用trace2(2)就相当于trace(x2, d);#@将单字符标记符变换为单字符,即加单引号,例如#define B(x) #@x,使用B(a)就是'a',但是B(abc)就......;
自带的宏
自带的宏有很多,例如 __FILE__,__LINE__ 等。
__FILE__宏在预编译时会替换成当前的源文件名;__VA_ARGS__一个可变参数的宏,总体来说就是将左边宏中...的内容原样抄写在右边__VA_ARGS__所在的位置,比如#define console(...) fprintf(stderr, __VA_ARGS__),调用console("x == %d\n", x)就会解析为fprintf(stderr, "x == %d\n", x);__LINE__宏在预编译时会替换成当前的行号;__FUNCTION__宏在预编译时会替换成当前的函数名称;__DATE__宏在预编译时会替换成当前的编译日期;__TIME__宏在预编译时会替换成当前编译时间;- 还有一些东西,不过都不甚重要了......;
真的没有了
超小容量,仅仅只是一个记录......

浙公网安备 33010602011771号