User Tools

Site Tools


sei_cert_c_coding_standard

This is an old revision of the document!


Preprocessor (PRE)

2.1 PRE30-C. Do not create a universal character name through concatenation

2.2 PRE31-C. Avoid side effects in arguments to unsafe macros

An unsafe function-like macro is one whose expansion results in evaluating one of its parameters more than once or not at all.

#define ABS(x) (((x) < 0) ? -(x) : (x)) /* UNSAFE */
  
void func(int n) {
  /* Validate that n is within the desired range */
  ++n;
  int m = ABS(n);
 
  /* ... */
}

2.3 PRE32-C. Do not use preprocessor directives in invocations of function-like macros

The arguments to a macro must not include preprocessor directives, such as #define, #ifdef, and #include.

void func(const char *src) {
  /* Validate the source string; calculate size */
  char *dest;
  /* malloc() destination string */
  memcpy(dest, src,
    #ifdef PLATFORM1
      12
    #else
      24
    #endif
  );
  /* ... */
}

3 Declarations and Initialization (DCL)

3.1 DCL30-C. Declare objects with appropriate storage durations

3.2 DCL31-C. Declare identifiers before using them

3.3 DCL36-C. Do not declare an identifier with conflicting linkage classifications

3.4 DCL37-C. Do not declare or define a reserved identifier

3.5 DCL38-C. Use the correct syntax when declaring a flexible array member

3.6 DCL39-C. Avoid information leakage when passing a structure across a trust boundary

3.7 DCL40-C. Do not create incompatible declarations of the same function or object

3.8 DCL41-C. Do not declare variables inside a switch statement before the first case label

sei_cert_c_coding_standard.1565125528.txt.gz · Last modified: 2019/08/06 21:05 by rpjday