重新定义或更改宏值 我目前正在开发一个已经在MFC C++中开发的项目,并且我面临着一个已经存在的宏的问题,它定义为: #define HEIGHT_TESTS 13
我试图改变代码中的值,但我认为由于它是一个预处理的定义,我无法做到这一点。是否有一种方法可以避免这个问题,而不必整体更改原始宏(因为它可能会影响程序的原始功能)。我只是想在一个特定的条件下改变它,在其他任何地方它都保持不变 为了让每个人都知道,我显然尝试过使用不同的宏定义和我打算使用的值(17),但没有运气重新定义或更改宏值 我目前正在开发一个已经在MFC C++中开发的项目,并且我面临着一个已经存在的宏的问题,它定义为: #define HEIGHT_TESTS 13,c++,mfc,macros,redefinition,C++,Mfc,Macros,Redefinition,我试图改变代码中的值,但我认为由于它是一个预处理的定义,我无法做到这一点。是否有一种方法可以避免这个问题,而不必整体更改原始宏(因为它可能会影响程序的原始功能)。我只是想在一个特定的条件下改变它,在其他任何地方它都保持不变 为了让每个人都知道,我显然尝试过使用不同的宏定义和我打算使用的值(17),但没有运气 任何帮助都将不胜感激。以下内容: #undef HEIGHT_TESTS #define HEIGHT_TESTS 17 // Use redefined macro // Restor
任何帮助都将不胜感激。以下内容:
#undef HEIGHT_TESTS
#define HEIGHT_TESTS 17
// Use redefined macro
// Restore
#undef HEIGHT_TESTS
#define HEIGHT_TESTS 13
您可以
undef
重新定义它并再次定义:
#include <iostream>
#define AAA 13
int main()
{
#undef AAA
#define AAA 7
std::cout << AAA;
}
预处理器从上到下逐行执行以下操作:
- 啊,
#定义AAA 13
,所以下次当我点击AAA
时,我会把它放在那里13
- 看,purePrint使用
AAA
,我用13
- 等等,现在他们告诉我使用
7
,所以我将停止使用13
- 因此,在这里,我将把
7
将给定代码转换为以下代码:
#include <iostream>
void purePrint() {
std::cout << 13;
}
void redefAndPrint() {
std::cout << 7;
}
int main()
{
purePrint();
redefAndPrint();
purePrint();
}
#包括
void purePrint(){
std::我建议为您的目的使用另一个宏,而不是#取消定义和重新定义它。请注意,如果需要恢复,您将无法保存现有值并恢复它。唯一的方法是使用13重新定义宏,这显然是一个硬编码值。至于答案,您已经有2个在wh下面我的回答是正确的。我确实尝试过使用不同的宏,但没有成功。程序崩溃。只有当我更改这个特定的#define值时,它才会给我一个正确的结果(不是我打算在这个特定条件下得到的结果)@Nerds.Dont.sware:是的。当你调用#undef AAA
时,你甚至不需要担心AAA
以前是否定义过。这个答案非常令人困惑。有人认为他们可以在运行时重新定义宏。确切地说,这是我的观点,有人认为他们可以undef
和像if>那样定义宏(someCondition){unde macro#define macro newValue}
他们声称这篇文章告诉他们这是可能的。虽然这篇文章没有这样说,但它没有对此提出警告,也许改进这篇文章是个好主意。我认为你修复这篇旧文章做了一件好事,因为它很有用。谢谢。你不应该缩进那些PP指令。这会让它们看起来像是在functi但预处理器没有任何范围的概念。
#include <iostream>
void purePrint() {
std::cout << 13;
}
void redefAndPrint() {
std::cout << 7;
}
int main()
{
purePrint();
redefAndPrint();
purePrint();
}