RE: Number of significant characters in identifiers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>We are evaluating some C code based on MISRA C:2004 standards, which
>state that "Identifiers (internal and external) shall not rely on the
>significance of more than 31 characters."  The code uses a lot of
>internal identifiers that exceed the 31 character limit.  The code is
>compiled with an old version of gcc, specifically version 2.96.  From
>the documentation of the current version of gcc, we know that for all
>internal names, all characters are significant.  Was this also the case
>for the older version of the compiler, even for the venerable old
>version 2.96?  If so, is there some document that states this?  (I can't
>find documentation that goes back to this old a version of the gcc.)
>Thanks in advance for any help you can provide.

I don't think it matters how many characters GCC (or ld/gas) considers significant, the rule (5.1) states that the limit shall not be exceeded even if the compiler supports it.  The limit is in place to ensure code portability and readability.

However, it is important to make the distinction that the rule doesn't outlaw identifiers that are >31 characters.  It outlaws identifiers that are significant beyond 31 characters.  for example:

//this would be a breach of misra 5.1 as the 32nd character is significant (ie. the first 31 characters of each identifier are not unique):
uint32_t identifieris30characterstohere1abcdefg;
uint32_t identifieris30characterstohere1bbcdefg;

//this, however, is fine:
uint32_t identifieris30characterstohere1abcdefg;
uint32_t identifieris30characterstohere2bbcdefg;

The reason being that the identifier is unique within the first 31 characters.  Anything after the 31st character is essentially chopped off.

If none of the >31 character identifiers in your code share the same first 31 chars, then it is Misra compliant.


        Stuart Henderson
        Software Development Engineer
        ADI Edinburgh Design Centre
        Analog Devices Ltd




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux