1

将我的项目编译为 64 位目标时(这不被视为 32 位目标上的警告),我收到以下警告:

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

我以某种方式设法关闭了错误/警告消息编号,所以我不知道在我的代码中使用#pragma warn.

我需要使用#pragma warn,因为我只想禁止在我的代码中批准的地方(关闭并再次打开警告)。

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

4

1 回答 1

3

64 位编译器基于 CLang,它不使用警告编号,这就是您看不到它们的原因。以下信息来自 Embarcadero 论坛中的 C++Builder 首席开发人员之一 Bruneau Babet:

如何抑制 64 位 XE3 警告?

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 不支持该选项。因此,您必须使用命令行来了解 ach 警告所属的组,或者您可以在此处查看警告声明:

https://github.com/llvm/llvm-project/tree/main/clang/include/clang/Basic

*.td 文件声明各种警告。上面提到的是 https://github.com/llvm/llvm-project/tree/main/clang/include/clang/Basic/DiagnosticSemaKinds.td

奇怪的是,Embarcadero DocWiki#pragma clang上仍然没有记录。

于 2014-03-19T20:03:43.467 回答