Re: RFC: Enabling -Wshadow, by default?
"Friedrich W. H. Kossebau" <[email protected]>
| Newsgroups | gmane.comp.kde.devel.general |
|---|---|
| Organization | KDE |
| Message-ID | <2714010.vYhyI6sBWr@klux> |
Am Montag, 5. Januar 2026, 10:08:41 Mitteleuropäische Normalzeit schrieb Sune Vuorela: > On 2025-12-29, Friedrich W. H. Kossebau <[email protected]> wrote: > > --- 8< --- > > > > Now, fixing those warnings one finds there are some cases where the > > shadowing might not really be a critical issue. E.g. names of local helper > > variables which are later reused in another deeper scope, with little > > chance to get this wrong: > > --- 8< --- > > > > [...] > > auto it = something(); > > if (it) > > [...] > > for (...) { > > > > [...] > > auto it = somethingelse(); > > if (it) > > [...] > > > > } > > > > --- 8< --- Anyone? I have seen meanwhile related changes, which were simply using alternative names in such cases (e.g. index vs. idx). Myself not convinced these changes improved things in summary... > cppcheck also have warnings for that. > > There is also the > > QString Foo::name() const { > return {}; > } > > void Foo::someFunction() { > QString name = name(); > .... > } > > That we have in quite many places (cppcheck also warns by default on > these) Though what is the motivation of this kind of function-shadowing-by-variable warning? What risks are there when missing out the same name? Given the type is different here almost always? A pattern I have seen often in code is using the same variable name for caching the result of some more expensive getter call for a property, which has made totally sense when reading the code as human in the given context. And cannot remember bugs related to any shadowing here: --- 8< --- void Foo::someFunction() { // cache result of expensive to estimate property const QString name = this->name(); // do stuff referencing "name" property value multiple times: // [...] } --- 8< --- So, what motivates people to act on this type of warning cppcheck emits? And what would be the naming pattern to use here instead, which adds more value by the risks avoided over the cost of more explicit/cumbersome names? Cheers Friedrich