假设我有以下宏:
#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应该是可能的
最佳答案
自引用宏根本不起作用:
http://gcc.gnu.org/onlinedocs/cpp/Self_002dReferential-Macros.html#Self_002dReferential-Macros
如果您使用的是C++,则可以使用模板函数和 namespace 获得相同的结果:
template <typename T> void xxx( x ) {
printf( "%s\n", x );
}
namespace my_namespace {
template <typename T> void xxx( T x ) {
::xxx(x);
::yyy(x);
}
}
关于macros - 如何使用先前的定义重新定义宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3085071/