假设我声明了一个宏名称任何东西,xyz()
。
现在我正在创建另一个宏 xyz1()
并引用第一个宏,即第二个宏中的 xyz()
。
最后,我将创建另一个宏 xyz2()
并在第三个宏中引用第二个宏。
现在我的问题是:这是正确的(它执行时没有任何问题)?
宏xyz()
定义了两次。为什么它没有给出错误?解决办法是什么?
最佳答案
不,第一个宏只能定义一次。当你写的时候
#define Symbol SymbolResolution
只要预处理器看到 Symbol
,就会用 Symbol
替换 SymbolResolution
。如果 SymbolResolution
是 #define
,或者包含一些内部有 #define
的符号,它们也会发生同样的情况 - 它们都会被替换。这种情况会一直发生,直到整个翻译单元中没有带有 #define
的符号为止。
因此您可以根据需要从其他宏中引用宏。但是,您不能递归地引用宏。您还应该小心这一点 - 如果您滥用宏,这很容易导致大量难以阅读且很难调试的代码。
关于c - C中的宏....请给出解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591298/