我可以在函数范围中使用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里面)。 –