фатальная ошибка C1017: недопустимое целочисленное постоянное выражение при использовании " #if (false)"

имеют следующий код, который работает под Linux, но дает ошибку для MSVS

#if (false)
....
#endif

ошибка: фатальная ошибка C1017: недопустимое целочисленное постоянное выражение

Я нашел этот отчет в интернете Microsoft: http://msdn.microsoft.com/en-us/library/h5sh3k99.aspx

в то время как описанная информация немного отличается от моего случая, поскольку я не использовал "#define"

Итак, мой вопрос:

  1. Is есть ли способ заставить его работать для MSVC без изменения кода ?
  2. если код должен быть обновлен, какое лучшее решение для такого случая?

2 ответов


похоже, что ваша версия компилятора MS не поддерживает false как встроенную константу. Это не удивительно, потому что Microsoft имеет пятнистую запись поддержки стандартов для C и c++.

один из способов сделать эту работу без изменения кода-передать параметры командной строки компилятору, чтобы определить false как 0 и true как 1:

-Dfalse=0 -Dtrue=1

есть ли способ заставить его работать для MSVC без изменения кода ?

не совсем так. Определение макроса для false запрещено стандартом по уважительным причинам, [макро.названия]/2:

переводческая единица не должна #define или #undef имена лексически идентичные ключевым словам, идентификаторам, перечисленным в таблице 3, или описанную в 7.6.

и я не вижу других путь.

если код должен быть обновлен, какое лучшее решение для такого рода кейс?

заменить 0 на false.