내 전 처리기는 #if
조건을 평가할 목적으로 정의되지 않은 상수가 0이라고 가정합니다.#if에서 사용되는 정의되지 않은 상수의 값은 무엇입니까?
정의되지 않은 동작을 사용하거나 정의되지 않은 상수를 사용할 수 있습니까?
내 전 처리기는 #if
조건을 평가할 목적으로 정의되지 않은 상수가 0이라고 가정합니다.#if에서 사용되는 정의되지 않은 상수의 값은 무엇입니까?
정의되지 않은 동작을 사용하거나 정의되지 않은 상수를 사용할 수 있습니까?
예, 신뢰할 수 있습니다. C99 표준 §6.10.1 ¶3에서 지정 매크로 팽창 정의 단항 연산자에 의한 모든 교체가 수행 된 후
로 대체나머지 모든 식별자 프로파일 번호
0
편집
죄송합니다, 나는 그것이 C의 문제라고 생각; 여전히 더 큰 문제는, C++ 표준 (§16.1 ¶4)에 해당하는 부분은 언급하지 : 때문에 매크로 확장 및 가, 나머지 모든 식별자와 키워드 수행 된 정의 단항 연산자로 모두 교체 후
,
true
및false
를 제외하고 PP-수0
유일한 차이점은 C++에서 그들은 심지어 특별한 의미를 가지고있는 동안, 특별한 처리가 필요하지 않습니다 C에서 true
및 false
의 다른 처리입니다으로 대체됩니다 전처리 단계에서
매크로로 정의되지 않은 식별자는식이 계산되기 전에 0
으로 변환됩니다.
예외는 true
인 식별자이며 1
으로 변환됩니다. 이것은 C++ 전 처리기에만 해당됩니다. C에서 이것은 발생하지 않으며 true
을이 방법으로 사용하려면 <stdbool.h>
을 포함해야합니다.이 경우 매크로로 정의되며 특별한 처리가 필요하지 않습니다.