为什么宏在这种情况下不起作用?

时间:2013-08-30 09:09:08

标签: c

我的代码如下:

funcA() {
   #define strdup(a) NULL
   funcB();
}

另一个文件中使用funcB()。我发现marco strdup(a)不起作用。我怎么能让它工作?

2 个答案:

答案 0 :(得分:4)

我认为funcB使用strdup,否则您的问题没有意义。

宏仅与预处理器相关,不会传播到不同的编译单元。如果funcB位于不同的编译单元中,那么宏也需要在那里定义,这通常是通过在所有需要它的编译单元中包含宏的头来实现的。

答案 1 :(得分:1)

它不起作用,因为包含funcB的源文件不了解您的宏。

宏在预处理期间展开,不会传播到不同的翻译单元。也就是说,解决此问题的常用方法是将宏定义放在头文件中。包含在需要宏定义的每个源文件中。

同样来自C标准:

  

6.10.3.5宏观定义的范围

     

宏定义持续(独立于块结构)直到相应的#undef   遇到指令或(如果没有遇到)指令直到预处理结束   翻译单位。宏观定义在翻译阶段4之后没有任何重要意义。

所以不计算函数范围。