C 및 C의 정의되지 않은 상수 및 #if 조건 평가
전처리기 논리에서는 매크로와 상수가 중요한 역할을 하는 경우가 많습니다. #if 조건에서 정의되지 않은 상수를 처리할 때 한 가지 일반적인 시나리오가 발생합니다. 여기에서는 이러한 정의되지 않은 상수의 예측 가능한 동작에 의존하는 것이 유효한지 여부를 살펴보겠습니다.
문제:
개발자는 종종 정의되지 않은 상수가 다음과 같은 값을 취한다고 가정합니다. #if 평가에 사용되는 경우 0입니다. 이 가정을 신뢰할 수 있습니까, 아니면 정의되지 않은 상수에서 정의되지 않은 동작을 예상해야 합니까?
답변:
예, 이 가정을 신뢰할 수 있습니다. C99 표준은 §6.10.1 ¶3에서 다음과 같이 명확하게 지정합니다.
매크로 확장 및 정의된 단항 연산자로 인한 모든 대체가 수행된 후 나머지 모든 식별자는 pp 번호 0으로 대체됩니다
마찬가지로 C 표준(§16.1 ¶4)에서는 다음과 같이 규정합니다.
매크로 확장 및 정의된 단항 연산자로 인한 모든 대체가 수행된 후 true 및 false를 제외한 나머지 모든 식별자와 키워드는 다음과 같습니다. pp-번호 0으로 대체됩니다
즉, 매크로 확장 및 기타 전처리 단계 후에 #if 조건에 나타나는 정의되지 않은 식별자 또는 상수가 자동으로 값 0으로 대체됩니다. 이 동작은 전체에서 일관됩니다. C 및 C.
이러한 예측 가능한 동작을 통해 개발자는 정의되지 않은 결과나 오류의 위험 없이 #if 조건에서 정의되지 않은 상수를 플래그나 자리 표시자로 편리하게 사용할 수 있습니다. 전처리 단계 이전에 정의되지 않은 상수가 정의되지 않은 경우 컴파일러는 기본적으로 이를 0으로 처리합니다.
위 내용은 정의되지 않은 상수는 C 및 C의 #if 조건에서 0으로 평가됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!