【问题标题】:Error C1189 #error: The C++ Standard Library forbids macroizing the keyword "inline"错误 C1189 #error: C++ 标准库禁止宏化关键字“内联”
【发布时间】:2020-08-14 18:55:43
【问题描述】:

我正在将一个项目从 VS 2010 迁移到 VS2019。我的代码在 VS 2010 中运行良好,而我在 VS2019 中遇到相同代码的错误。

#undef inline
#define inline __forceinline

..///
..///code 

#undef inline
#define inline inline

Error C1189 #error: The C++ Standard Library forbids macroizing the keyword "inline". Enable warning C4005 to find the forbidden define

如何消除此错误。

【问题讨论】:

  • 你不能 #define 一个 C++ 关键字。它们都是保留的标识符。您可以通过删除 #define inline __forceinline 来消除错误消息。
  • @FrançoisAndrieux 我相信标准规定,如果您包含任何标准库头文件,则重新定义关键字是 UB。它并没有说它总是 UB。话虽如此,不包含任何标准库头文件是相当困难的。
  • @Brian 我看到问题 like this one 同意你的观点,但它可以追溯到 C++11,this 将关键字标识为保留,而 this 禁止使用保留标识符,没有标题存在的条件。您评论中的信息是否仍然是最新的?我是否误读了标准?
  • @FrançoisAndrieux 我认为在这种情况下,“标识符”应该被理解为指代一种令牌。在翻译阶段 7 之前,inline 将只是一个预处理标记,而不是一个标记,因此该规则将不适用。但是我同意标准对此并不十分清楚。
  • @FrançoisAndrieux 关于标题的规则仍然存在here。如果存在对重新定义关键字的一般禁令,那将是多余的。

标签: c++ visual-studio-2010 migration visual-studio-2019 inline


【解决方案1】:

我通过将 _XKEYCHECK_H 添加到Properties > C/C++ > Preprocessor > Preprocessor Definitions 来解决它。
参考here

【讨论】:

    【解决方案2】:

    我认为在预处理器定义中添加_ALLOW_KEYWORD_MACROS也可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-14
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多