在switch中未处理的枚举值

时间:2014-03-19 19:09:10

标签: 64-bit warnings c++builder enumeration c++builder-xe5

将我的项目编译为64位目标时(这不是32位目标上的警告)我收到此警告:

5 enumeration values not handled in switch: 'kCreated', 'kLoaded', 'kConnected'...

我已设法关闭错误/警告消息编号,因此我不知道在我的代码中使用#pragma warn抑制的数字。

我需要使用#pragma warn,因为我只想在我的代码中禁用已批准的位置(关闭再打开警告)。

奖金问题:有没有人知道如何再次取回错误/警告号码?

1 个答案:

答案 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