我有一个关于使用#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本身的宏)以确保在所有源文件中更改宏定义?
谢谢,
斯利拉姆
答案 0 :(得分:10)
#ifdef
是预处理程序指令,这意味着它将在编译源代码之前应用。这意味着只有“下方”的源代码才会受到影响。如果您通过预处理器运行源代码,您将能够看到结果。这将使您更好地了解预处理器的工作原理。
答案 1 :(得分:2)
#undef运算符的范围是调用后的整个文件。这包括包含它的所有文件(因为预处理器只是将文件链接在一起。)因为它是预处理器的一部分,所以它没有像scope这样奇怪的东西。