【发布时间】: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