I have seen #ifndef ABC
and #if !defined (ABC)
in the same C source file.
Is there subtle difference between them? (If it is a matter of style, why would someone use them in the same file)
The difference between the two is that #ifdef can only use a single condition, while #if defined(NAME) can do compound conditionals.
In the C Programming Language, the #ifndef directive allows for conditional compilation. The preprocessor determines if the provided macro does not exist before including the subsequent code in the compilation process.
Use the #ifdef statement when you want to compile a section only if a specified expression has been defined with #define. Use #ifndef when you want to compile a section only if a specified expression has not been defined.
#if checks for the value of the symbol, while #ifdef checks the existence of the symbol (regardless of its value).
No, there's no difference between the two when used that way. The latter form (using defined()
) is useful when the initial #if
or one of the subsequent #elif
conditions needs a more complex test. #ifdef
will still work, but it might be clearer using #if defined()
in that case. For example, if it needs to test if more than one macro is defined, or if it equals a specific value.
The variance (using both in a file) could depend on specific subtleties in usage, as mentioned above, or just poor practice, by being inconsistent.
In the context you gave, they are the same: you are just checking for the existence of one macro identifier.
However, the #if form allows you to evaluate expressions, which can be useful.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With