0

我有以下代码:

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

而 funcB() 在另一个文件中。我发现马strdup(a)可不起作用。我怎样才能使它起作用?

4

2 回答 2

4

我假设funcBuses strdup,否则你的问题没有意义。

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

于 2013-08-30T09:14:07.083 回答
1

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

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

同样来自C标准:

6.10.3.5 宏定义的范围

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

所以它不考虑函数范围。

于 2013-08-30T09:16:10.337 回答