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