Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
nieprawidłowe wyrażenie stałej liczby całkowitej
Uwagi
Wyrażenie w #if
dyrektywie nie istnieje lub nie zostało obliczone na stałą.
Stałe zdefiniowane przy użyciu #define
muszą mieć wartości, które są obliczane na stałą całkowitą, jeśli są używane w #if
dyrektywie , #elif
lub #else
.
Przykład
Poniższy przykład generuje kod C1017:
// C1017.cpp
#define CONSTANT_NAME "YES"
#if CONSTANT_NAME // C1017
#endif
Możliwe rozwiązanie:
// C1017b.cpp
// compile with: /c
#define CONSTANT_NAME 1
#if CONSTANT_NAME
#endif
Ponieważ CONSTANT_NAME
funkcja oblicza ciąg, a nie liczbę całkowitą, #if
dyrektywa generuje błąd krytyczny C1017.
W innych przypadkach preprocesor ocenia niezdefiniowaną stałą jako zero. Może to spowodować niezamierzone wyniki, jak pokazano w poniższym przykładzie.
YES
jest niezdefiniowany, więc oblicza wartość zero. Wyrażenie #if
CONSTANT_NAME
daje wartość false, a kod, który ma być używany YES
, jest usuwany przez preprocesor.
NO
jest również niezdefiniowany (zero), więc #elif
CONSTANT_NAME==NO
daje w wyniku wartość true (0 == 0
), powodując, że preprocesor pozostawi kod w #elif
części instrukcji — dokładnie odwrotnie od zamierzonego zachowania.
// 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
Aby dokładnie sprawdzić, jak kompilator obsługuje dyrektywy preprocesora, użyj /P, /E lub /EP.