Я обнаружил, что написание#elseif против #elif (C/C++ препроцессор)
#ifdef ...
#elseif defined(...)
#else
#endif
всегда приводит либо с помощью #ifdef или #ELSE состояние, никогда в #elseif. Но замена #elif заставляет его работать как ожидалось в зависимости от того, что определено. Какая запутанная цель, если таковая имеется, обслуживается существованием #elseif? А если нет, то почему препроцессор не жалуется?
Возможно, поэтому в течение многих лет (на самом деле, десятилетия) я использовал уродливые блоки # else/# endif, так как по крайней мере они надежны!
Если значение после '# ifdef' определено, вы должны увидеть ошибку« Недопустимая препроцессорная ошибка ». ([Пример] (http://ideone.com/FCPtSD)) – molbdnilo