macros - 如何使用先前的定义重新定义宏

标签 macros c-preprocessor

假设我有以下宏:

#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/

相关文章:

c - 在 C 中使用宏将项目附加到数组

c++ - BOOST_PP 在空序列情况下扩展序列

python - 是否可以将 C 预处理器宏可靠地转换为 python 代码?

c - 如何处理 C 中的多级包含?

c - 查看预处理器在做什么

c - 宏函数指针问题

Scala getter/setter 作为宏

c - 在多个文件中重用 C 宏

vim - 您在 Vim 中使用过的最喜欢/最高效的宏是什么?

clojure - 你能给我一些 -> 宏的现实例子吗?