![]() |
1
3
预处理器不知道函数,只知道源文件和行号。在那个阶段,它不执行语法分析,只执行文本分析和替换。这就是为什么
|
![]() |
2
3
在C99标准中,
这意味着它超出了C预处理器的范围,而C预处理器不知道函数边界或函数名。此外,它将扩展为字符串,这使得它不适合嵌入变量名中。 GCC(4.4.1)手册在第5.43节(函数名作为字符串)中指出:
如果有一种方法可以将函数名干净地放入预处理器中,那么这里的文档很可能交叉引用了它,如果没有定义它的话。 |
![]() |
3
1
从技术上讲,你的问题的答案是“是的”,有“某种方式”。但我认为你已经知道了,而且你确实不能在宏预处理器级别处理这个问题。 当然,总有一种方法,你可能只需要在那台图灵机上放一个很长的磁带。 我想你已经知道了,但是 为了记录 您可以获得想要的总体结果:
所以现在,您只需要实现
|
![]() |
4
1
你可以用 token concatenation .
输出来自 GCC - E :
使用可变宏和X宏处理参数列表的版本:
|
![]() |
Imad Hamaidi · 如何使预处理器宏在编译之前对代码求值 2 年前 |
![]() |
Lightsout · 用于填充表的sql连接压缩行 2 年前 |
![]() |
Rogue258 · 在DB2SQL中使用存储过程/宏进行声明和循环 2 年前 |
![]() |
allthem · 将VBA设置为仅在第一次打开电子表格时自动运行 2 年前 |
![]() |
user306080 · 下面的宏在做什么? 2 年前 |
![]() |
Xev · 运行时错误91:对象变量或未设置块 3 年前 |
![]() |
digital illusion · 请参阅宏扩展中的外部板条箱 3 年前 |
![]() |
Aleph · 标识符在C预处理器指令中的作用是什么 3 年前 |
![]() |
Gakuo · 使用lisp循环宏进行高级循环 6 年前 |