2014-02-27 68 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指令,你的函数作用域结束。

在你的情况下,当你试图定义关键字时,会导致未定义的行为

相关问题