当前位置:  开发笔记 > 编程语言 > 正文

你能嵌套C预处理器指令吗?

如何解决《你能嵌套C预处理器指令吗?》经验,为你挑选了2个好方法。

例如,以下是可能的:

#define definer(x) #define #x?

shoosh.. 9

不,你做不到.
pound(#)符号在定义中具有不同的含义.这意味着 - 如果这是一个参数,请通过引用它使其成为一个字符串.



1> shoosh..:

不,你做不到.
pound(#)符号在定义中具有不同的含义.这意味着 - 如果这是一个参数,请通过引用它使其成为一个字符串.


事实上,断言宏是使用#stringification运算符.#expr创建assert(expr)参数的C字符串.

2> 小智..:

您不能嵌套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或其他一些自动化结合在一起,它将是非常无缝的,并不会让你的开发更加困难.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有