【发布时间】:2011-03-06 07:57:50
【问题描述】:
假设我有以下宏:
#define xxx(x) printf("%s\n",x);
现在在某些文件中,我想在不更改其名称的情况下使用此宏的“增强”版本。新版本探索了原版本的功能,做了更多的工作。
#define xxx(x) do { xxx(x); yyy(x); } while(0)
这当然给了我重新定义警告,但为什么我得到 'xxx' 没有在这个范围内声明?我应该如何正确定义它?
编辑:根据这个http://gcc.gnu.org/onlinedocs/gcc-3.3.6/cpp/Self_002dReferential-Macros.html 应该是可能的
【问题讨论】:
-
那个自引用宏页面正在描述防止宏替换无限递归的规则。这并不意味着您可以定义一个宏来表示不止一件事。
标签: macros c-preprocessor