Ann*_*562 3 c macros c-preprocessor
我按如下方式定义了两次宏:
#define a 2
#define a 3
Run Code Online (Sandbox Code Playgroud)
我认为a代码中的任何出现都会被替换为2,并且当#define a 3遇到时,代码中没有更多的as可供替换3,因此2优先.
但是当我执行时它a被3替换,为什么?
如果你像这样定义一次宏,编译器至少应该给你警告,如果不是错误的话.这是一个错误.
§6.10.3/ 2:当前定义为类似对象宏的标识符不应由另一个
#define预处理指令重新定义,除非第二个定义是类似于对象的宏定义且两个替换列表相同.
您可以通过显式删除以前的定义来重新定义宏:
#define a 2
/* In this part of the code, a will be replaced with 2 */
...
#undef a
#define a 3
/* From here on, a will be replaced with 3 */
...
Run Code Online (Sandbox Code Playgroud)
使用文件中该点处激活的宏定义读取文件时发生宏替换,但内部(大多数)预处理指令除外.
§6.10/ 7:除非另有说明,否则预处理指令中的预处理令牌不受宏扩展的影响.
§6.10.3.5/ 1:宏定义持续(独立于块结构),直到
#undef遇到相应的指令或(如果没有遇到)直到预处理转换单元结束.
| 归档时间: |
|
| 查看次数: |
3454 次 |
| 最近记录: |