>백엔드 개발 >C++ >#define 전처리기를 사용하여 C 키워드를 재정의할 수 있습니까?

#define 전처리기를 사용하여 C 키워드를 재정의할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-23 14:51:14404검색

Can C   Keywords Be Redefined Using the #define Preprocessor?

C 전처리기 #define으로 키워드 재정의

C 표준에서 #define을 사용하여 언어 키워드를 재정의하는 타당성을 둘러싼 열띤 논쟁이 종종 촉발되었습니다. 논쟁. 이 글의 목적은 논쟁의 여지가 있는 이 문제를 조명하는 것입니다.

C 표준(§17.4.3.1.1/2)에 따르면 전처리기 매크로는 표준 라이브러리 헤더에 선언되거나 정의된 이름을 재정의할 수 없습니다. 또한 표준 헤더를 포함하는 번역 단위 내에서 C 키워드와 어휘적으로 동일한 매크로를 재정의하는 것을 금지합니다.

그러나 C에서는 규칙이 눈에 띄게 변경되었습니다. C 0x 초안(FCD §17.6.3.3.1)에서는 #define 또는 #undef를 사용한 키워드 재정의를 명시적으로 금지합니다. 이러한 움직임은 전처리기로 키워드를 조작하면 예측할 수 없는 동작과 잠재적인 표준 위반이 발생할 수 있다는 공통된 합의에 부합하는 것으로 보입니다.

그럼에도 불구하고 "번역 단위는 #define 또는 #undef를 수행할 수 없습니다"라는 문구는 주목할 가치가 있습니다. 키워드와 어휘적으로 동일한 이름"은 이후 최종 C 11 표준에서 개정되었습니다. 새로운 문구(ISO/IEC 14882:2011 §17.6.4.1/4)는 다음과 같습니다. "번역 단위는 키워드와 어휘적으로 동일한 이름에 대해 매크로를 정의해서는 안 됩니다."

이 개정판은 다음과 같은 내용을 명시적으로 금지하는 것으로 보입니다. #define을 사용한 키워드 재정의가 표준에서 제거되었습니다. 그러나 표준 헤더에 선언되거나 정의된 이름을 재정의하는 것은 여전히 ​​금지되어 있습니다(ISO/IEC 14882:2011 §17.6.4.1/6).

현재 진행 중인 논쟁을 고려하여 다음과 같은 경우 주의를 기울이는 것이 좋습니다. C 프로그램에서 언어 키워드를 재정의하려고 합니다. 특정 조건에서는 기술적으로 가능할 수 있지만 이러한 관행으로 인해 다양한 컴파일러 및 툴체인과의 프로그램 호환성이 손상될 수 있습니다. 표준을 준수하고 전처리기 매크로 또는 사용자 정의 유형과 같은 대체 메커니즘을 사용하는 것이 일반적으로 더 안전한 접근 방식으로 간주됩니다.

위 내용은 #define 전처리기를 사용하여 C 키워드를 재정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.