Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

No other identifiers are reserved and if . If a program declares or defines an identifier in a context in which it is reserved , or defines a reserved identifier as a macro name, the behavior of that identifier is undefined. Trying to define a reserved identifier may lead to that identifier can result in its name conflicting with that used in implementation, which may or may not be detected at compile time.

...

Noncompliant Code Example

In this example, variables are defined with names reserved for the implementation.

Code Block
bgColor#FFCCCC

long _Max_Value;
int __length; 

...

The compliant solution uses identifiers that are not reserved.

Code Block
bgColor#ccccff

long maxValue;
int length;

Non-Compliant Code Example

In this example, a variable beginning with an underscore is defined with implicit global scope.

Code Block
bgColor#FFCCCC
size_t _limit = 100;

unsigned int getValue(unsigned int count){

  size_t i;
  unsigned int result = 0;

  for(i = 0; i < _limit; i++){    
    result++;        
    if(i == count){ 
      break;
    }
  }

}

Compliant Code Solution 1

In the compliant solution, the variable is declared as static and, hence, has file scope.

Code Block
bgColor#ccccff
static size_t _limit = 100;

unsigned int getValue(unsigned int count){

  size_t i;
  unsigned int result = 0;

  for(i = 0; i < _limit; i++){    
    result++;        
    if(i == count){ 
      break;
    }
  }

}

Compliant Code Solution 2

In the compliant solution, the variable name does not begin with an underscore and, hence, is not reserved.

Code Block
bgColor#ccccff
size_t limit = 100;

unsigned int getValue(unsigned int count){

  size_t i;
  unsigned int result = 0;

  for(i = 0; i < limit; i++){    
    result++;        
    if(i == count){ 
      break;
    }
  }

}

...

Noncompliant Code Example

Identifiers with external linkage include setjmp, errno, math_errhandling, and va_end.
In the example, errno is defined. The errno value set by the function open() would not be accessible to the program as its definition is suppressed. For information regarding redefining errno, see ERR31-C. Don't redefine errno.

...

In the compliant solution, the reserved identifier errno is not used.

Code Block
bgColor#ccccff

#include <errno.h>

#define keyNum 200

int validate(unsigned int secretValue){
  
  char fname[] = "non_exist.txt";
  int fd;
  int result = -1;

  fd = open(fname, O_RDONLY); 

  if(fd == -1){
    printf("Error opening file. Error code : %d\n", errno); 
    return result;
  }

  close(fd); 

  if(errno % secretValue == 20){
    result = 0;
  }
  else{
    result = -1;
  } 
  
  return result;
  
}

Risk Assessment

Use of Using reserved identifiers may cause can lead to incorrect program operation.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

DCL37-C

low

unlikely

low Low

P3

L3

Automated Detection

A module can be written in Compass/ROSE to can detect violations of this rule.

References

Wiki Markup
\[[ISO/IEC 9899:1999|AA. C References#ISO/IEC 9899-1999]\] Section 7.1.3, "Reserved Identifiers"

...