我可以在函數範圍中使用define嗎?如:我可以在函數範圍中使用define指令嗎?
void run() {
#define auto BOOST_AUTO
auto i = v.begin();
//...
}
該函數的定義仍然有效嗎?我可以使它在本地的功能? (請不要告訴我使用C++ 11)
我可以在函數範圍中使用define嗎?如:我可以在函數範圍中使用define指令嗎?
void run() {
#define auto BOOST_AUTO
auto i = v.begin();
//...
}
該函數的定義仍然有效嗎?我可以使它在本地的功能? (請不要告訴我使用C++ 11)
宏的範圍(在預處理器內)是從其定義點到相應的#undef
或翻譯單元的末尾。預處理器不知道代碼中的函數或其他結構。
#define
s不像函數那樣保留自己的作用域。他們被預處理器天真地取代。
#define
ing關鍵字導致未定義的行爲。 這意味着它由編譯器來做。我假設大多數編譯器會得到你的想法,並用BOOST_AUTO
替換所有出現的auto
。
你的意思是「未定義的行爲」,對吧?否則,你說「這是意想不到的行爲,但它通常會做預期的...」 – Angew
前兩行抄襲從這裏:http://stackoverflow.com/questions/12641091/limit-scope-of-define -標籤 –
我可以在函數範圍中使用define嗎?
是的,你可以在任何地方使用預處理指令。 cpp不知道任何c/C++語法。在函數作用域結束之前放置一個#undef
指令。
是的,你可以使用,但你也需要一個#undef
指令,你的函數作用域結束。
在你的情況下,當你試圖定義關鍵字時,會導致未定義的行爲。
怎麼樣#undef? –
'#define'ing關鍵字導致意想不到的行爲! :) – poitroae
'BOOST_AUTO'在這裏替換'auto'時不起作用(這是一個類似於函數的宏,所以它需要逗號分隔的參數列表在parens裏面)。 –