[Development] Can we remove recommendation against unnamed namespaces from Qt coding conventions?
apoenitz
apoenitz at t-online.de
Wed Feb 21 20:26:37 CET 2024
On Wed, Feb 21, 2024 at 06:56:41PM +0000, Jøger Hansegård via Development wrote:
> >> Our Qt coding conventions ([1]https://wiki.qt.io/Coding_Conventions)
> >> has a statement on the use of unnamed (anonymous) namespaces. As far as
> >> I understand, this statement is now outdated.
>
> > [I'll assume we are talking about functions here.]
>
> Anonymous namespaces can be quite helpful to avoid name clashes of non-function types.
Non-function types are practically not covered by the current rule, as it has
an 'static [...] if possible' and there's no possibility to have 'static' on enums
and types, and it has a different meaning for e.g. class members.
> Quite often I see both local functions and other local entities in the same cpp
> file. I don't want to recommend against moving local functions into the unnamed
> namespace unless there is a technical reason why we shouldn't.
I gave some numbers in the previous mail that I considered at the time of its
writing a technical reason.
What would be an acceptable 'technical reason' here?
> > It would be a change to the worse in my book which I personally would not like.
> > Anonymous namespaces are harder to set up and to maintain and produce at best
> > identical results compared to static'
>
> Would an option be to change from:
>
> Avoid the use of anonymous namespaces in favor of the static keyword
> if possible. A name localized to the compilation unit with static is
> guaranteed to have internal linkage. For names declared in anonymous
> namespaces the C++ standard unfortunately mandates external linkage.
> (7.1.1/6, or see various discussions about this on the gcc mailing
> lists)
>
> to
>
> Use unnamed namespaces for all internal/non-exported entities. Functions can
> alternatively be marked `static` in the global namespace. Marking functions
> `static` also in the unnamed namespace can help readability, particularly in reviews.
That's technically an option, but again not a good one in my book. There is no
advantage /known to me/ /for functions/ to be in the anonymous namespace instead
of being 'static', and I listed a few cases where there are disadvantages.
This change also does not solve the "problem" of having /different/ rules than
the (self-proclaimed...) "Core Guidelines" which was - to me - the main reason
for the proposed change.
Andre'
More information about the Development
mailing list