Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
недопустимое константное выражение целого типа
Замечания
Выражение в директиве #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.