例如,以下是可能的:
#define definer(x) #define #x?
shoosh.. 9
不,你做不到.
pound(#
)符号在定义中具有不同的含义.这意味着 - 如果这是一个参数,请通过引用它使其成为一个字符串.
不,你做不到.
pound(#
)符号在定义中具有不同的含义.这意味着 - 如果这是一个参数,请通过引用它使其成为一个字符串.
您不能嵌套C预处理程序指令.幸运的是,几乎没有必要.如果你确实需要这种能力,那么在将代码交给C编译器之前,你运行的另一个预处理器几乎肯定会更好.例如:
sed 's/@CUSTOMER@/J. Random Person/' foo.c.in > foo.c cc foo.c
另一个有用的技巧是将技巧分离为单个头文件,该文件由您自己编写的程序生成:
./generate-trickery --greet 'J. Random Person' > foo.h
其中foo.h看起来像这样:
#define GREET(x) ("J. Random Person greets you, " #x)
如果你将它与Makefile或其他一些自动化结合在一起,它将是非常无缝的,并不会让你的开发更加困难.