I have come across some example code that goes like this:
#ifdef WIN32
...
#elif WIN64
...
#endif
In an #ifdef
block, is it actually legal to use #elif
to mean #elif defined
?
I have come across some example code that goes like this:
#ifdef WIN32
...
#elif WIN64
...
#endif
In an #ifdef
block, is it actually legal to use #elif
to mean #elif defined
?
No, it shouldn't be. That's not to say that some obscure C compiler wouldn't accept it as such, but it isn't part of the C standard.
Normally, for something like this you would use either #elifdef FOO
(which I've never actually seen in production code) or #elif defined(FOO)
(like you mentioned).
This code appears to be working in a odd way; it's rather first checking if WIN32
is defined, then checking if WIN64
is nonzero.
WINxx
is defined as 1, this code isn't strictly wrong, just weird (prob. not what they intended). Remember undefined names expand to 0 in expressions, so this is ill-typed, but valid logic. –
Stentor #define WINxx 1
, not #define WINxx
. –
Argentiferous © 2022 - 2024 — McMap. All rights reserved.
#elif
without argument). – Cooperation