c - C中的宏....请给出解决方案

标签 c macros c-preprocessor

假设我声明了一个宏名称任何东西,xyz()

现在我正在创建另一个宏 xyz1() 并引用第一个宏,即第二个宏中的 xyz()

最后,我将创建另一个宏 xyz2() 并在第三个宏中引用第二个宏。

现在我的问题是:这是正确的(它执行时没有任何问题)? 宏xyz()定义了两次。为什么它没有给出错误?解决办法是什么?

最佳答案

不,第一个宏只能定义一次。当你写的时候

#define Symbol SymbolResolution

只要预处理器看到 Symbol,就会用 Symbol 替换 SymbolResolution。如果 SymbolResolution#define,或者包含一些内部有 #define 的符号,它们也会发生同样的情况 - 它们都会被替换。这种情况会一直发生,直到整个翻译单元中没有带有 #define 的符号为止。

因此您可以根据需要从其他宏中引用宏。但是,您不能递归地引用宏。您还应该小心这一点 - 如果您滥用宏,这很容易导致大量难以阅读且很难调试的代码。

关于c - C中的宏....请给出解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591298/

相关文章:

c - 如何安装gcc交叉编译器

c - 使用结构体编程

c - 如何在链表中获取两个集合的公共(public)元素?

macros - 两个独立的键盘,两个独立的空格键

C 成语和鲜为人知的事实

c - 如何在 C 中标记化和 strize __func__ 宏?

c - 从 FUSE 调试系统调用

c++ - 错误 C2544 : expected ')' for operator '()'

c++ - 是否可以使用其他 cpp 文件中的#define?

c - C中的预处理器指令#pragma pack