用#pragma pop_macro("int")
#include <iostream>
using namespace std;
#define int double
void main()
{
int iOne = 1;
cout << sizeof(iOne) << endl;
#pragma push_macro("int")
#undef int
int iTwo = 2;
cout << sizeof(iTwo) << endl;
#pragma pop_macro("int")
}没有#语用pop_macro("int")
#include <iostream>
using namespace std;
#define int double
void main()
{
int iOne = 1;
cout << sizeof(iOne) << endl;
#pragma push_macro("int")
#undef int
int iTwo = 2;
cout << sizeof(iTwo) << endl;
//#pragma pop_macro("int")
}我刚刚在vs2017上尝试过,没有任何different.both没有警告/错误,工作正常,并具有相同的输出:
8 4.
所以,我的问题是:
发布于 2017-07-31 15:00:13
非常粗野地说,push_macro的意思是“存储当前宏的定义”,pop_macro的意思是“恢复保存的宏定义”。
这两个命令在当前翻译单元的范围内都有意义(即当前编译的cpp文件和包含标头)。
因此,如果不调用pop_macro,就不会简单地还原宏的定义,这是完全允许的,并不意味着UB。
在示例"With pop_macro“末尾放置的pop_macro实际上没有任何效果,因为后面没有编译的代码。
注意,我们谈论的是在编译时发生的事情,而不是在运行时发生的事情。
https://stackoverflow.com/questions/45419020
复制相似问题