2014-02-27 73 views
3

我可以在函數範圍中使用define嗎?如:我可以在函數範圍中使用define指令嗎?

void run() { 
    #define auto BOOST_AUTO 
    auto i = v.begin(); 
    //... 
} 

該函數的定義仍然有效嗎?我可以使它在本地的功能? (請不要告訴我使用C++ 11)

+1

怎麼樣#undef? –

+1

'#define'ing關鍵字導致意想不到的行爲! :) – poitroae

+0

'BOOST_AUTO'在這裏替換'auto'時不起作用(這是一個類似於函數的宏,所以它需要逗號分隔的參數列表在parens裏面)。 –

回答

3

宏的範圍(在預處理器內)是從其定義點到相應的#undef或翻譯單元的末尾。預處理器不知道代碼中的函數或其他結構。

1

#define s不像函數那樣保留自己的作用域。他們被預處理器天真地取代。

#define ing關鍵字導致未定義的行爲。 這意味着它由編譯器來做。我假設大多數編譯器會得到你的想法,並用BOOST_AUTO替換所有出現的auto

+1

你的意思是「未定義的行爲」,對吧?否則,你說「這是意想不到的行爲,但它通常會做預期的...」 – Angew

+0

前兩行抄襲從這裏:http://stackoverflow.com/questions/12641091/limit-scope-of-define -標籤 –

1

我可以在函數範圍中使用define嗎?

是的,你可以在任何地方使用預處理指令。 cpp不知道任何c/C++語法。在函數作用域結束之前放置一個#undef指令。

1

是的,你可以使用,但你也需要一個#undef指令,你的函數作用域結束。

在你的情況下,當你試圖定義關鍵字時,會導致未定義的行爲

相關問題