[奇怪の东西]关于宏的那些事儿

  看到一些关于宏的有意思的东西,记录一下。

关于宏定义中的 #,##,#@

  一共就仨东西......

  1. # 将对应的变量字符串化,例如 #define trace(x, format) printf(#x " = %" #format "\n", x),使用 trace(i, d) 就相当于 printf("x = %d\n", x)
  2. ## 将把宏参数名与宏定义代码序列中的标识符连接在一起,形成一个新的标识符,例如 #define trace2(i) trace(x##i, d),使用 trace2(2) 就相当于 trace(x2, d)
  3. #@ 将单字符标记符变换为单字符,即加单引号,例如 #define B(x) #@x,使用 B(a) 就是 'a',但是 B(abc) 就......;

自带的宏

  自带的宏有很多,例如 __FILE__,__LINE__ 等。

  1. __FILE__ 宏在预编译时会替换成当前的源文件名;
  2. __VA_ARGS__ 一个可变参数的宏,总体来说就是将左边宏中 ... 的内容原样抄写在右边 __VA_ARGS__ 所在的位置,比如 #define console(...) fprintf(stderr, __VA_ARGS__),调用 console("x == %d\n", x) 就会解析为 fprintf(stderr, "x == %d\n", x)
  3. __LINE__ 宏在预编译时会替换成当前的行号;
  4. __FUNCTION__ 宏在预编译时会替换成当前的函数名称;
  5. __DATE__ 宏在预编译时会替换成当前的编译日期;
  6. __TIME__ 宏在预编译时会替换成当前编译时间;
  7. 还有一些东西,不过都不甚重要了......;

真的没有了

  超小容量,仅仅只是一个记录......

posted @ 2022-03-06 21:26  Arextre  阅读(48)  评论(0编辑  收藏  举报