【问题标题】:Having preprocessor directive as part of statement将预处理器指令作为语句的一部分
【发布时间】:2019-10-31 07:56:29
【问题描述】:

我们转移到一个新的编译环境,突然间我开始在这个语句中看到这个错误“预期表达式”:

enum {
  PROJX,
  PROJY,
  PROJW
};

constexpr int PLATFORM =
#if defined(X)
  PROJX
#elif defined(Y)
  PROJY 
#elif defined(W)
  PROJW
#endif
  ;

错误指向最后一个分号。

这是否与特定的 c++11/14/17 标准有关?

【问题讨论】:

  • 您确定定义了XYW 吗?在我看来,在你的新配置中,没有一个是定义的,所以你有constexpr int PLATFORM = ;
  • 可能是 X、Y 和 W 都未定义所以结果是 constexpr int PLATFORM = ;?
  • 尝试添加#else
  • ...特别是,尝试添加一个包含#error ... 消息的#else 部分。
  • “这是否与特定的 c++11/14/17 标准有关?” 没有。

标签: c++ c++11 c-preprocessor constexpr


【解决方案1】:

没有标准改变这种行为。我的猜测是这三个都没有定义,你最终得到:

constexpr int PLATFORM = ;

您可以通过添加#else 和默认值/#error 或在预处理器运行后检查编译器的输出来对此进行测试。

【讨论】:

  • 评论回答问题获得赞成票。回答问题得到了反对票。哦,我多么爱你。
  • 人很奇怪。你甚至不必是陌生人;这只会让事情变得更糟。
猜你喜欢
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多