Neo*_*ile 14 c++ macros mfc redefinition
我目前正在研究一个用MFC C++编写的已经开发的项目,并且我正面临着一个已经存在的定义宏的问题:
#define HEIGHT_TESTS 13
Run Code Online (Sandbox Code Playgroud)
我试图从代码中更改值,但我认为,因为它是一个预处理的定义,我无法做到这一点.有没有办法解决这个问题,而不必整体改变原始宏(因为它可能会影响程序的原始功能).我只是打算在一个特定的条件下改变它,在其他地方休息它仍然是相同的.
只是为了让每个人都知道,我显然尝试使用不同的宏定义和我打算使用的值(17),但没有运气.
任何帮助将非常感激.
Lih*_*ihO 32
您可以undefINE并define再次:
#include <iostream>
#define AAA 13
int main()
{
#undef AAA
#define AAA 7
std::cout << AAA;
}
Run Code Online (Sandbox Code Playgroud)
输出: 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();
}
Run Code Online (Sandbox Code Playgroud)
预处理器从顶部到底部逐行进行,执行此操作:
#define AAA 13所以当我AAA下次打的时候,我会放在那里13AAA,我正在替换它137,所以我会停止使用13redefAndPrint()我会把它放在那里7将给定代码转换为以下代码:
#include <iostream>
void purePrint() {
std::cout << 13;
}
void redefAndPrint() {
std::cout << 7;
}
int main()
{
purePrint();
redefAndPrint();
purePrint();
}
Run Code Online (Sandbox Code Playgroud)
将输出13713,最新的#define AAA 4将不会被使用.
类似于以下内容:
#undef HEIGHT_TESTS
#define HEIGHT_TESTS 17
// Use redefined macro
// Restore
#undef HEIGHT_TESTS
#define HEIGHT_TESTS 13
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39775 次 |
| 最近记录: |