Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
недопустимое константное выражение целого типа
Замечания
Выражение в директиве #if не существовало или не вычислялось константой.
Константы, определенные с помощью, #define должны иметь значения, которые оценивают целочисленную константу, если они используются в #if#elifдирективе , или #else директиве.
Пример
В следующем примере создается C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Возможное решение
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Так как CONSTANT_NAME вычисляется строка, а не целое число, #if директива создает неустранимая ошибка C1017.
В других случаях препроцессор вычисляет неопределенную константу как нулю. Это может привести к непредвиденным результатам, как показано в следующем примере.
YES не определен, поэтому он оценивается до нуля. Выражение #ifCONSTANT_NAME оценивается как false, а используемый код YES удаляется препроцессором.
NO также не определен (ноль), поэтому #elifCONSTANT_NAME==NO вычисляется значение true (0 == 0), что приводит к тому, что препроцессор покидает код в #elif части инструкции , точно противоположное предполагаемому поведению.
// C1017c.cpp
// compile with: /c
#define CONSTANT_NAME YES
#if CONSTANT_NAME
// Code to use on YES...
#elif CONSTANT_NAME==NO
// Code to use on NO...
#endif
Чтобы узнать, как компилятор обрабатывает директивы препроцессора, используйте /P, /E или /EP.