4


我有一个关于使用#undef重新定义宏的问题。
我有一个global.h包含许多#define-d 宏的文件。在使用这些宏的代码中,我发现宏所持有的值不够通用。我想重新定义宏以使它们更通用。为此,我编写了以下代码片段:

 std::cout << endl << "Enter pitch threshold:" << endl;  
 std::cin >> pitchT;  
 #ifdef PitchThreshold  
  #undef PitchThreshold  
  #define PitchThreshold pitchT   
  #endif  

我的问题是:
以这种方式使用#undef 是否确保在所有源文件中重新定义宏,或者它是编写上述代码行的函数的本地函数?#undef 和 #define 运算符的范围是什么?
我可以做什么(除了更改文件中的宏#define-d 本身)以确保宏定义在所有源文件中都发生更改?
谢谢,
斯里拉姆

4

2 回答 2

10

#ifdef是一个预处理器指令,这意味着它将在您的源代码编译之前应用。这意味着只有“下面”的源代码会受到影响。如果您通过预处理器运行源代码,您将能够看到结果。这将使您更深入地了解预处理器的工作原理。

于 2010-11-01T10:10:41.527 回答
2

#undef 运算符的范围是调用后的整个文件。这包括包含它的所有文件(因为预处理器只是将文件链接在一起。)因为它是预处理器的一部分,所以它没有像范围这样的奇怪东西。

于 2010-11-01T10:11:14.523 回答