22.2 Preprocessor Directives
The XC32 accepts several specialized preprocessor directives, in addition to the standard directives. All of these are tabulated below.
Directive | Meaning | Example |
---|---|---|
# |
Preprocessor null directive, do nothing. | # |
#assert |
Generate error if condition false. | #assert SIZE > 10 |
#define |
Define preprocessor macro. |
|
#elif |
Short for #else #if. |
see #ifdef |
#else |
Conditionally include source lines. | see #if |
#endif |
Terminate conditional source inclusion. | see #if |
#error |
Generate an error message. | #error Size too big |
#if |
Include source lines if constant expression true. |
|
#ifdef |
Include source lines if preprocessor symbol defined. |
|
#ifndef |
Include source lines if preprocessor symbol not defined. |
|
#include |
Include text file into source. |
|
#line |
Specify line number and filename for listing | #line 3 final |
#nn filename |
(where nn is a
number, and filename is the name of the source file)
the following content originated from the specified file and line
number. |
#20 init.c |
#pragma |
Compiler specific options. | See the Pragma Directives section in this guide. |
#undef |
Undefines preprocessor symbol. | #undef FLAG |
#warning |
Generate a warning message. | #warning Length not
set |
Macro expansion using arguments can use the #
character
to convert an argument to a string and the ##
sequence to concatenate
arguments. If two expressions are being concatenated, consider using two macros in case
either expression requires substitution itself; for example
#define __paste1(a,b) a##b
#define __paste(a,b) __paste1(a,b)
lets you use the paste
macro to concatenate two
expressions that themselves can require further expansion. Remember, that once a macro
identifier has been expanded, it will not be expanded again if it appears after
concatenation.