【问题标题】:Can I use define directive in a function scope?我可以在函数范围内使用定义指令吗?
【发布时间】:2014-03-30 12:28:20
【问题描述】:

我可以在函数范围内使用定义吗?如:

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

函数执行后定义仍然有效吗?我可以使它成为函数的本地函数吗? (请不要告诉我用C++11)

【问题讨论】:

  • #defineing 关键字会导致意外行为! :)
  • BOOST_AUTO 在此处替换 auto 时将不起作用(这是一个类似函数的宏,因此需要在括号内使用逗号分隔的参数列表)。
  • @MichaelBurr 只是想给它起别名。让它更短

标签: c++


【解决方案1】:

宏的范围(在预处理器内)是从其定义点到相应的#undef 或翻译单元的结尾。预处理器对代码中的函数或其他结构一无所知。

【讨论】:

    【解决方案2】:

    我可以在函数范围内使用define吗?

    是的,您可以在任何地方使用预处理器指令。 cpp 不知道任何 c/c++ 语法。在函数作用域结束之前放置一个#undef 指令。

    【讨论】:

      【解决方案3】:

      是的,您可以使用,但您还需要一个 #undef 指令,您的函数范围结束。

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

      【讨论】:

        【解决方案4】:

        #defines 不像函数那样拥有自己的作用域。它们被预处理器天真地替换了。

        #defineing 关键字会导致未定义的行为。 这意味着编译器要做什么取决于编译器。我假设大多数编译器都会理解你的想法,并将所有出现的auto 替换为BOOST_AUTO

        【讨论】:

        • 您的意思是“未定义的行为”,对吗?否则,您会说“这是出乎意料的行为,但它通常会按预期进行......”
        • 前两行抄袭自这里:-stackoverflow.com/questions/12641091/…
        猜你喜欢
        • 1970-01-01
        • 2013-09-18
        • 1970-01-01
        • 2015-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 1970-01-01
        相关资源
        最近更新 更多