Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: added EX0 exception (for macros)

...

Code Block
bgColor#ccccff
langc
void *malloc_custom(size_t nbytes) {  
  void *ptr;
  /* ... */
  /* allocate storage from own pool and set ptr */
  return ptr;
}
 
void free_custom(void *ptr) {  
  /* ... */
  /* return storage to own pool */
}

Exceptions

DCL37-EX0: It is permissible to use reserved words in declarations when the risk of clashing with a preexisting variable is greater than the risk of clashing with a reserved word. In particular, the scope must be used in a macro that may be invoked with arbitrary preexisting variables (possibly as arguments).  The following code demonstrates a SWAP_UNSAFE() macro that exchanges two values, and uses a __tmp variable as a temporary value. This code is permitted because the temporary variable is more likely to clash with a non-reserved variable in the current scope than with a reserved word.  This code should be considered non-portable; as it requires the current platform to allow the use of __tmp.

Code Block
bgColor#ccccff
langc
#define SWAP_UNSAFE(type, a, b) {type __tmp = a; a = b; b = __tmp;}

Such macros should only be used with great care. See rules PRE31-C. Avoid side-effects in arguments to unsafe macros and PRE00-C. Prefer inline or static functions to function-like macros for more information.

Risk Assessment

Using reserved identifiers can lead to incorrect program operation.

...