【发布时间】:2020-03-02 15:50:00
【问题描述】:
出于遗留原因,我有一个宏;称之为#define foo。现在,foo 是一个非函数类型的宏。我需要 foo 在函数调用之前扩展为任何内容,或者编译器可以忽略的内容(例如属性)。
但是,我发现我现在还需要创建一个名为 foo 的函数。
预处理器将函数式宏与非函数式宏区别对待,这意味着可能有一种方法可以使其将foo(...) 与foo ... 进行不同的转换。但是,我不能将 foo 定义为函数宏。
有什么办法可以解决这个问题吗?
附言“一开始就不要那样做”是没有帮助的。 foo 宏已经存在;更改它是不可行的,也不是新引入的功能(这是我无法控制的)。请将讨论限制在按要求回答问题。
例子:
#define /* ... magic here ... */
// void foo(int x, int y); <-- might be in a module
void bar()
{
// First 'foo' has no effect
// Second 'foo' calls the function 'foo'
foo foo(42, 7);
}
【问题讨论】:
-
我只是建议使用查找和替换
-
@Asadefa,不可信。这个问题存在于一个广泛使用的库中;从字面上看,需要更改数千个项目。而且冲突的功能其实也不是我能控制的。
-
所以您正在管理一个广泛使用的库?
-
你能给出一个你想要做什么的真实代码示例吗?
-
你能和
#pragma push_macro(foo)、#undef foo...#pragma pop_macro(foo)一起工作吗?
标签: c++ c-preprocessor