gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 05:59:23 26 4
gpt4 key购买 nike

假设我有以下宏:

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com