I have found that writing
#ifdef ...
#elseif defined(...)
#else
#endif
always results in using either the #ifdef or the #else condition, never the #elseif. But substituting #elif causes it to work as expected based on what's defined. What convoluted purpose, if any, is served by the existence of #elseif? And if none, why doesn't the preprocessor complain?
Maybe this is why for years (decades, really), I've been using ugly #else/#endif blocks, since at least they're reliable!
#ifdef
is defined, you should see an "Invalid preprocessing directive" error. (Example) – Master#elseif
is not part of the C++ language. Only#elif
exists: en.cppreference.com/w/cpp/preprocessor/conditional – Aliped