C宏参字符串化操作
简单说明C中(仅只能将)宏参字符串化操作, 也建议⼤家多看英⽂原著, 参考如下⽹站:
将宏参(macro argument into a stringconstant)字符串化, 只要在#符号后仅跟传递到宏定义中的参数即可。格式如下:#define strx(x) #x
**注意宏名后仅跟括号!
其在linux头⽂件(include/linux/stringify.h)中也有相关使⽤及说明, 且⿎励⼤家使⽤:
#define __stringify_) #x
#define __) __stringify_1(x)
定义为两层的原因是允许第⼀层的宏扩展(macro expansion),
下⾯以enum为例说明如何应⽤, 因为经常需要从enum标量名字上判别含义, 故有需要将枚举值值字符串化打印到log中。
#include <stdlib.h>
#include <stdio.h>
#define strx3(x, y, z) #x" "#y" "#z
#define strx(x) "prefix " #x" "
enum exam {
STR_A,
STR_B,
STR_C,
STR_D,
};
#define enumx_1(x) #x
#define enumx(x) \
x == STR_A ? enumx_1(STR_A) : \
x == STR_B ? enumx_1(STR_B) : \
enum c++x == STR_C ? enumx_1(STR_C) : \
x == STR_D ? enumx_1(STR_D) : "null"
int main()
{
enum exam a = STR_B;
printf("test macro: %s\n", enumx(a));
printf("test macro: " strx(GNU) strx3(abc, def, ghi) "\n");
exit(1);
}
保存名为c_macro.c⽂件
编译:$ gcc -o c_macro c_macro.c
运⾏:$ ./c_macro
输出:
test macro: STR_B
test macro: prefix GNU abc def ghi
上⾯宏strx3定义的串插的双引号加空格仅为格式漂亮所加。如有更漂亮的应⽤,不吝赐教,感谢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。