Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新定义或更改宏值 我目前正在开发一个已经在MFC C++中开发的项目,并且我面临着一个已经存在的宏的问题,它定义为: #define HEIGHT_TESTS 13_C++_Mfc_Macros_Redefinition - Fatal编程技术网

重新定义或更改宏值 我目前正在开发一个已经在MFC C++中开发的项目,并且我面临着一个已经存在的宏的问题,它定义为: #define HEIGHT_TESTS 13

重新定义或更改宏值 我目前正在开发一个已经在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

我试图改变代码中的值,但我认为由于它是一个预处理的定义,我无法做到这一点。是否有一种方法可以避免这个问题,而不必整体更改原始宏(因为它可能会影响程序的原始功能)。我只是想在一个特定的条件下改变它,在其他任何地方它都保持不变

为了让每个人都知道,我显然尝试过使用不同的宏定义和我打算使用的值(17),但没有运气


任何帮助都将不胜感激。

以下内容:

#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();
}