gpt4 book ai didi

c++ - 在 gcc 中启用 "differing levels of indirection"警告/错误

转载 作者:行者123 更新时间:2023-11-30 04:56:41 25 4
gpt4 key购买 nike

我们有一个句柄类型声明如下:

typedef void *config_h;

我们有一个声明如下的函数:

void func(config_h hConfig);

我是这样调用它的:

config_h hConfig;
func(&hConfig);

甚至没有警告。关于这个项目我不能改变的事情:它是 C++11,并使用 -fpermissive 编译。 config_h typedef 是在一个文件中完成的,该文件也由 C 编译器编译,顺便说一句..

我在这里看过:https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

看起来 -Wstrict-aliasing 可能是问题所在,但事实并非如此。我收到了大量关于各种指针转换的警告,但不是这个。

问题是“我可以启用什么最窄的警告(或者最好是错误)来防止这个问题?”

奖金问题:如果像这样的事情让我发疯,那么切换到 clang 可能会带来返回吗?

最佳答案

正如一些人在评论中向我指出的那样(感谢所有人),当涉及到 void* 时,甚至没有考虑不同级别的间接寻址。我在其他编译器中验证了这一点。所以我的实际问题的答案,我能说的最好的是,没有可以启用的警告或错误,无论编译器如何

就是说,如果 void* 实际上指向一个具体类型,那么即使在非常大的解决方案中清理它也是相对轻松的。我继续前向声明类型:

struct config_o;
typedef config_o* config_h;
//removed typedef void* config_h;

我能够在不到 8 小时的时间内清理 200,000 行代码中的大约 40 种句柄类型。发现(并修复)了几个严重的错误,这占用了我大部分时间。

关于c++ - 在 gcc 中启用 "differing levels of indirection"警告/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396701/

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