[Development] Can we remove recommendation against unnamed namespaces from Qt coding conventions?

Marco Bubke marco.bubke at qt.io
Wed Feb 21 20:29:25 CET 2024


On 21.02.24 19:56, Edward Welbourne via Development wrote:
> Andre' Poenitz <apoenitz at t-online.de> (21 February 2024 19:21) wrote:
>> 1. 'static' is attached to individual functions, not a scope of
>> uncertain extend. When working on unfamiliar code it helps to
>> understand the context. With 'static' the locality is obvious in the
>> immediate context of the function and not set by some 'namespace {'
>> potentiall a dozen functions and hundreds of lines of code away.
> 
> In particular this means that if someone picks up the function and moves
> it elsewhere in the file, cut and paste, it's very easy to fail to
> notice that they've moved it out of a nameless namespace and thereby
> suddenly made it visible to the linker.  They'd have taken that little
> word "static" on the front of the declaration with it, if it'd been
> there, because it's not so easy to miss.
> 
> (Incidentally, the ways I can think of to say "has no name" tend to
> suffer from some degree of precedent as "has a name but it has not been
> disclosed" - the anonymous author of a pamphlet, the unnamed person who
> reported a problem.  I'm currently unable to think of such a precedent
> for "nameless", but I suspect that's only that I can't currently think
> of it.  Then again, if a namespace with no name actually does have a
> secret name, I guess that just matches the linguistic baggage.)
> 

There is a warning for a missing 
prototype/declarations(-Wmissing-prototypes and -Wmissing-declarations). 
The clang code model in QtCreator is warning me reliable about it. You 
can even enforce it by -Werror if you like. ;-)

Anonymous namespace have an other advantage. They work with other 
construct like classes, enumerations etc. too. People tend to copy code 
and then you end with a slightly different class. We already had ODR 
problems because it. And this bugs are hard to find. If you put 
everything in an anonymous namespace you are simply fine. It is a very 
easy rule. Yes, that should be not happen but it does.


More information about the Development mailing list