我有一个关于使用#undef重定义宏的问题。
我有一个定义文件,其中包含许多# global.h -d宏。在使用这些宏的代码中,我发现宏包含的值不够通用。我想重新定义宏,使它们更通用。为此,我编写了以下代码片段:
std::cout << endl << "Enter pitch threshold:" << endl;
std::cin >> pitchT;
#ifdef PitchThreshold
#undef PitchThreshold
#define PitchThreshold pitchT
#endif 我的问题是:
以这种方式使用#undef是否确保在所有源文件中重新定义宏,或者它是编写上述代码行的函数的本地宏吗?#undef和#define运算符的作用域是什么?
我可以做什么(除了改变文件中的宏,它们本身是#define-d ),以确保宏定义在所有源文件中都被更改?
谢谢,
Sriram
发布于 2010-11-01 18:10:42
#ifdef是一个预处理器指令,这意味着它将在编译源代码之前应用。这意味着只有“下面”的源代码会受到影响。如果您通过预处理器运行源代码,您将能够看到结果。这将使您对预处理器的工作方式有更深入的了解。
发布于 2010-11-01 18:11:15
undef运算符的作用域是调用后的整个文件。这包括包含它的所有文件(因为预处理器只是将文件链接在一起)。因为它是预处理器的一部分,所以它没有像作用域这样奇怪的东西。
https://stackoverflow.com/questions/4067967
复制相似问题