1
與#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")
}
有無#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")
}
我剛纔試過vs2017,沒有什麼different.both沒有警告/錯誤,工作正常,並具有相同的輸出:如果#pragma push_macro沒有#pragma pop_macro會怎麼樣?
所以,我的問題是:
- 爲什麼VS允許這種行爲?
- 它是UB嗎?
如果沒有「彈出」,初始#pragma會滲入任何後續代碼。所以這是完全合法的,但它是正確的嗎?這就是你需要決定的。 – PaulMcKenzie