Page 1 of 1

Rule 5.9 - Scope of uniqueness

Posted: Fri Sep 11, 2015 5:49 pm
by jade
In Rule 5.9, the amplification says that the identifier name should be unique across all name spaces and translation units. This is an expansion of what's in the rule header, but is consistent with the purpose of the "Amplification" sections. However, the examples imply that identifiers can be unique if there is no linkage. Isn't this a contradiction?

Re: Rule 5.9 - Scope of uniqueness

Posted: Mon Sep 14, 2015 9:34 pm
by Steve Montgomery
My interpretation is that an identifier with internal linkage must be different from any other identifier. However, an identifier with no linkage doesn't have to be unique provided that all uses of the identifier denote objects that also have no linkage.

So, in the examples given in the rule, the identifier index appears three times, twice in file1.c and once in file2.c. This is compliant with the rule because none of the objects has linkage. However, count in file1.c breaks the rule because it denotes an object with internal linkage and two objects with no linkage.

Re: Rule 5.9 - Scope of uniqueness

Posted: Fri Oct 09, 2015 12:44 pm
by misra-c
The amplification clarifies the scopes over which identifiers with internal linkage should be checked. This rule only applies where one of the identifiers in the comparison has internal linkage.

The following table gives the application of rules for different combinations of object identifiers:

Code: Select all

                            Identifier 2 linkage
   Identifier 1    |  external   | internal  | none
   ------------------------------------------------------------
   external        | 5.8         | 5.8 / 5.9 | 5.8
   -------------------------------------------------------------
   internal        | 5.8 / 5.9   | 5.9       | 5.9
   ------------------------------------------------------------
   none            | 5.8         | 5.9       | 5.3(if hidden)
   -------------------------------------------------------------