gpt4 book ai didi

c++ - 在 #error 预处理器指令中带有撇号的警告

转载 作者:太空狗 更新时间:2023-10-29 20:36:49 27 4
gpt4 key购买 nike

如果我尝试编译一个文件(error_c11.cpp),其内容是:

 #if 0
#error This shouldn't be a problem
#endif

使用命令行:

gcc error_c11.cpp

我收到以下警告(然后是关于 main 的一些其他链接器错误):

error_c11.cpp:2:20: warning: missing terminating ' character
#error This shouldn't be a problem

相反,使用 clang 或 Visual Studio 编译相同内容不会给出任何警告。这是 gcc(使用 v4.9.3)中的错误,还是 #error 预处理器指令和其他编译器中不允许使用 ' 字符更宽容?

最佳答案

#error 指令的语法是:

# error pp-tokensopt 换行

pp-token 是预处理器 token 。只有当撇号是字符常量(或字符串文字,或可能是 header 名称)的一部分时,它才能出现在预处理器标记中。

#error 之后的标记不必在语法上正确,但它们必须是有效的标记。

解决方法:

#if 0
#error "This shouldn't be a problem"
#endif

你甚至可以这样写:

#if 0
#error This shouldn't be a problem, m'kay?
#endif

在那种情况下,不是问题,m' 被视为一个多字符常量,这是无意义的,但在这种情况下是合法的。

(题外话:将 C 预处理器应用于 Ada 代码的尝试遇到了类似的问题,因为 Ada 使用单个撇号来引入属性或限定表达式。)

关于c++ - 在 #error 预处理器指令中带有撇号的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com