c – 重新定义或更改宏值
作者:互联网
我目前正在开发一个用MFC C编写的已经开发的项目,并且我正面临一个问题,即已经存在的宏具有以下定义:
#define HEIGHT_TESTS 13
我试图从代码中更改值,但我认为,因为它是一个预处理的定义,我无法做到这一点.有没有办法解决这个问题而不必整体改变原始宏(因为它可能会影响程序的原始功能).我只是想在一个特定的条件下改变它,在其他地方休息它仍然是相同的.
只是为了让每个人都知道,我显然尝试使用不同的宏定义和我打算使用的值(17),但没有运气.
任何帮助将非常感激.
解决方法:
您可以取消定义它并再次定义:
#include <iostream>
#define AAA 13
int main()
{
#undef AAA
#define AAA 7
std::cout << AAA;
}
产出:7
请注意,以#开头的语句是在编译代码之前需要处理的预处理程序指令.在这种情况下,这个常量AAA将简单地替换为7,即它就像文本替换一样,没有额外的语法检查,没有类型安全等……
…这是你应该避免使用宏和#defines的主要原因,它们可以被静态函数和变量替换:)
为什么“文字替换”?
看看这段代码:
#include <iostream>
#define AAA 13
void purePrint() {
std::cout << AAA;
}
void redefAndPrint() {
#undef AAA
#define AAA 7
std::cout << AAA;
}
int main()
{
#undef AAA
#define AAA 4
purePrint();
redefAndPrint();
purePrint();
}
预处理器从顶部到底部逐行进行,执行此操作:
>啊,#define AAA 13,所以当我下次打AAA时,我会把那里放13
>看,purePrint使用AAA,我用13替换它
>等等,现在他们告诉我使用7,所以我会停止使用13
>所以在这里的redefAndPrint()我会把它放在那里7
将给定代码转换为以下代码:
#include <iostream>
void purePrint() {
std::cout << 13;
}
void redefAndPrint() {
std::cout << 7;
}
int main()
{
purePrint();
redefAndPrint();
purePrint();
}
将输出13713,最新的#define AAA 4将不会被使用.
标签:c,macros,mfc,redefinition 来源: https://codeday.me/bug/20190928/1828378.html