f78
The #if Directive
Contents|Index|Previous|Next
The
#if directive
The
#if
directive in its simplest form consists of the following statement.
#if expression
controlled text
#endif /* expression */
The comment
following #endif
is not required, but it is a good practice because it helps people match
the #endif
to the corresponding #if.
Such comments should always be used, except in short conditionals that
are not nested. In fact, you can put anything at all after the #endif
and it will be ignored by the GNU C preprocessor, but only comments are
acceptable in ANSI Standard C. expression
is a C expression of integer type, subject to stringent restrictions. It
may contain the following.
-
Integer constants, which
are all regarded as long
or unsigned long.
-
Character constants,
which are interpreted according to the char-acter set and conventions of
the machine and operating system on which the preprocessor is running.
The GNU C preprocessor uses the C data type char
for these character constants; therefore, whether some character codes
are negative is determined by the C compiler used to compile the preprocessor.
If it treats char
as signed, then character codes large enough to set the sign bit will be
considered negative; otherwise, no character code is considered negative.
-
Arithmetic operators
for addition, subtraction, multiplication, division, bitwise operations,
shifts, comparisons, and logical operations (&&
and ||).
-
Identifiers that are not
macros, which are all treated as zero(!).
-
Macro calls, which, in
the expression, are expanded before actual computation of the expression’s
value begins.
Note:
sizeof
operators and enum-type
values are not allowed. enum-type
values, like all other identifiers that are not taken as macro calls and
expanded, are treated as zero.
The
controlled text
inside of a conditional
can include preprocessing directives. Then the directives inside the conditional
are obeyed only if that branch of the conditional succeeds. The text can
also contain other conditional groups. However, the #if
and #endif
directives must balance.
0