gpt4 book ai didi

c++ - gcc -Wshadow 太严格了?

转载 作者:IT老高 更新时间:2023-10-28 22:23:04 26 4
gpt4 key购买 nike

在以下示例中:

class A
{
public:
int len();
void setLen(int len) { len_ = len; } // warning at this line
private:
int len_;
};

带有 -Wshadow 的 gcc 发出警告:

main.cpp:4: warning: declaration of `len' shadows a member of `this'

函数 len 和整数 len 是不同的类型。为什么会出现警告?

更新

我看到人们对“影子”的含义有着广泛的共识。从形式上看,编译器完全按照它的意图去做。

但是恕我直言,该标志是不实用的。比如常用的setter/getter成语:

class A {
void prop(int prop); // setter
int prop() const; // getter

int prop;
};

如果有一个警告标志在这种情况下不会发出警告,但会在“int a”隐藏“int a”的情况下发出警告,那就太好了。

在我的遗留代码上添加 -Wshadow 会发出大量警告,而我有时会发现由“阴影”问题引起的错误。

我不介意它被称为“-Wmuch_more_practical_and_interesting_shadow”或“-Wfoooooo”。

那么,是否有 其他 gcc 警告标志可以满足我的描述?

更新 2

我不是唯一一个认为 -Wshadow 不知何故没用的人 link text .我不孤独 :)不那么严格的检查可能会更有用。

最佳答案

这似乎在较新版本的 GCC 上得到解决。

From version 4.8 changelog :

The option -Wshadow no longer warns if a declaration shadows a function declaration,
unless the former declares a function or pointer to function, because this is a common
and valid case in real-world code.

它引用了 Linus Torvalds 对此主题的想法:https://lkml.org/lkml/2006/11/28/253

不幸的是,我目前工作的嵌入式系统的最新编译器仍然基于 gcc 4.6。

关于c++ - gcc -Wshadow 太严格了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2958457/

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