gpt4 book ai didi

c++ - GCC 编译器警告溢出

转载 作者:行者123 更新时间:2023-11-30 00:53:18 24 4
gpt4 key购买 nike

编辑:我找到了一种使用 GCC 禁用来自第三方代码的警告的方法。在此处查看此帖子:http://sphaleron.blogspot.se/2011/06/ignoring-gcc-warnings-on-per-file-basis.html或者如 bames53 帖子所说!

我刚刚升级了我的 GCC 编译器,突然间我收到了很多以前从未有过的警告。当我没有指定应该是Sint16的时候,基本上他们都是int到Sin16的转换。

下面的这个例子应该会抛出这样的警告:

int number = 6;
SDL_Rect rect = {number, number, number, number};

SDL_Rect 需要一个 Sint16 作为输入。无论如何,当我检查新警告时,我开始修复这些警告(因为为什么不呢?),令我惊讶的是,我从我添加的 glew 文件中收到了 100 多个警告,以便能够更有效地使用 OpenGL 进行绘制。我不打算仅仅为了修复警告而进入该代码。

你会怎么做?这有多重要?如果我不修复它们,是否有办法删除这些警告?

澄清:我总是修复更严重的警告,只是我代码中的所有警告都是缩小警告(在 glew.c 中是“警告:'variable' redeclared without dllimport attribute : 以前的 dllimport 忽略了 [-Wattributes]|"),我想知道修复这些问题有多重要,特别是因为 glew 向我扔了一大堆东西。

最佳答案

您的项目应该始终没有警告。将编译器设置为将警告视为错误是鼓励开发人员保持无警告状态的好方法,尽管您必须观察并确保应该修复的警告不会仅仅因为在特定时刻更容易而被禁用.禁用警告应该需要审查。

任何无法修复的警告,因为它们位于第三方 header 或其他地方,都应该被静音。否则它们会在输出中添加噪声,从而隐藏您可以而且应该修复的警告。

如果警告源相对本地化,您可以仅针对源中的那个位置禁用它:

// VC++
#pragma warning(push)
#pragma warning( disable : 4507 34)
#include <third_party_header.h>
#pragma warning(pop)

// clang
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
#include <third_party_header.h>
#pragma clang diagnostic pop

// GCC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
#include <third_party_header.h>
#pragma GCC diagnostic pop

如果警告出现在很多地方并且你无法修复它们,因为它们是某种误报,你可以考虑使用编译器标志在整个项目(或可能是模块)中禁用警告

VC++: /wd4507

GCC/clang: -Wno-uninitialized


您还应该定期重新评估所有禁用的警告,以确保随着代码库和工具链的发展,禁用它们的原因仍然有效。还要查找您可以启用的新引入的警告。


clang 有一个有用的工具来发现新的警告; -Weverything 标志。在 GCC 和 clang 上 -Wall 实际上只启用编译器开发人员认为广泛适用且具有相对严格的误报要求的警告子集;基本上它只是一组很好的默认警告。 -Weverything 启用编译器提供的每个警告。

与其对警告使用“加法”策略,在您阅读编译器文档的地方,选择对您来说似乎不错的警告以启用,我更喜欢将“减法”策略与 -Weverything 结合使用带有 -Wno-* 标志的列表。这样新的警告就会自动使用。请记住定期重新评估已禁用的警告,这样如果您之前没有发现有用的警告得到改进,您就会看到改进并能够使用它。

关于c++ - GCC 编译器警告溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16698808/

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