将我的项目编译为64位目标时(这不是32位目标上的警告)我收到此警告:
5 enumeration values not handled in switch: 'kCreated', 'kLoaded', 'kConnected'...
我已设法关闭错误/警告消息编号,因此我不知道在我的代码中使用#pragma warn
抑制的数字。
我需要使用#pragma warn
,因为我只想在我的代码中禁用已批准的位置(关闭再打开警告)。
奖金问题:有没有人知道如何再次取回错误/警告号码?
答案 0 :(得分:3)
64位编译器基于CLang,它不使用警告编号,这就是你没有看到它们的原因。以下信息来自Embarcadero论坛中C ++ Builder的主要开发人员之一Bruneau Babet:
How do I suppress 64bit XE3 warnings?
clang中的警告,因此bcc64,没有Wxxxx号码。在...后面 场景中有一个为每个警告生成的唯一ID,但它是 自动生成,不能假设在构建中保持不变。 相反,每个警告都有一个组。相关警告通常是相同的 组。有些团体只有一个警告。禁用组的警告 你可以在命令行上使用“-Wno-”,或者通过类似的东西 以下代码:
#pragma clang diagnostic ignored "-W<groupname>".
例如,您列出的第一个警告位于“float-equal”组下。 因此,“-Wno-float-equal”应禁用该警告。并且禁用该功能 关于未在交换机中处理的枚举器,您可以使用以下内容 代码:强>
#pragma clang diagnostic ignored "-Wswitch"
所以下一个显而易见的问题是如何找出每个群体。该 “-fdiagnostics-show-option”应该触发编译器显示 选项,但不幸的是IDE不尊重该选项。所以你必须 要么使用命令行来查找组警告所属的组 to,或者您可以在这里查看警告声明:
https://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/
* .td文件声明了各种警告。上面提到的是 https://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?view=markup
奇怪的是,Embarcadero DocWiki仍未记录#pragma clang
。