정수 계열 상수 식이 잘못되었습니다.
비고
#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을 생성합니다.
다른 경우에 전처리기는 정의되지 않은 상수를 0으로 계산합니다. 이 경우 다음 예제와 같이 의도하지 않은 결과가 발생할 수 있습니다.
YES
는 정의되지 않았으므로 0으로 계산됩니다. 식 #if
CONSTANT_NAME
은 false로 계산되며 YES
일 때 사용할 코드가 전처리기에 의해 제거됩니다. 또한NO
도 정의되지 않았으므로(0으로 계산되므로) #elif
CONSTANT_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