我的代码如下:
funcA() {
#define strdup(a) NULL
funcB();
}
在另一个文件中使用funcB()。我发现marco strdup(a)
不起作用。我怎么能让它工作?
答案 0 :(得分:4)
我认为funcB
使用strdup
,否则您的问题没有意义。
宏仅与预处理器相关,不会传播到不同的编译单元。如果funcB
位于不同的编译单元中,那么宏也需要在那里定义,这通常是通过在所有需要它的编译单元中包含宏的头来实现的。
答案 1 :(得分:1)
它不起作用,因为包含funcB
的源文件不了解您的宏。
宏在预处理期间展开,不会传播到不同的翻译单元。也就是说,解决此问题的常用方法是将宏定义放在头文件中。包含在需要宏定义的每个源文件中。
同样来自C标准:
6.10.3.5宏观定义的范围
宏定义持续(独立于块结构)直到相应的
#undef
遇到指令或(如果没有遇到)指令直到预处理结束 翻译单位。宏观定义在翻译阶段4之后没有任何重要意义。
所以不计算函数范围。