在gcc中启用“不同级别的间接”警告/错误

时间:2018-09-19 01:26:32

标签: c++ gcc

我们有一个声明为以下类型的句柄类型:

typedef void *config_h;

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

void func(config_h hConfig);

我这样称呼它:

config_h hConfig;
func(&hConfig);

甚至没有警告。对于该项目,我无法更改的地方是:C++11,并使用-fpermissive进行了编译。 config_h typedef在一个由C编译器btw编译的文件中完成。

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

看起来像-Wstrict-aliasing的票证,但事实并非如此。我收到许多有关各种指针转换的警告,但没有这一点。

问题是“我可以启用以防止出现此问题的最窄警告(最好是错误)是什么?”

红利问题:如果像这样的事情让我发疯,切换到clang可能会带来红利吗?

1 个答案:

答案 0 :(得分:1)

正如一些人在评论中向我指出的(谢谢所有人),在涉及void*时,甚至不考虑不同级别的间接访问。我在其他编译器中对此进行了验证。因此,对于我的实际问题,我可以告诉我的答案是,没有警告或错误,无论编译器是什么

也就是说,如果void*实际指向一个具体类型,即使在清理该问题的大型解决方案中,它也相对没有问题。我继续声明了这些类型:

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

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