문자열화의 마법 공개
프로그래밍 영역에서 문자열화는 매크로가 다음을 기반으로 문자열을 동적으로 생성할 수 있도록 하는 다용도 기술입니다. 그들의 주장. 이 프로세스가 어떻게 진행되는지 이해하는 데 중요한 것은 매크로 확장이 발생하는 세심한 순서입니다.
다음 매크로 정의를 고려하세요.
#define foo 4 #define str(s) #s
str(foo)가 평가되면 다음과 같은 결과가 발생합니다. 문자열화 작업(#)이 텍스트 확장보다 우선하기 때문에 #을 "foo"로 확장합니다. 그러나 매크로 간접 참조의 추가 레이어를 도입하면 작업 순서가 중요해집니다.
xstr(foo)의 사례
매크로 xstr(s) 정의 as:
#define xstr(s) str(s) #define str(s) #s #define foo 4
이 매크로를 xstr(foo)에 적용하면 "4"라는 예상치 못한 결과가 발생합니다. 이 미스터리를 푸는 열쇠는 다음 매크로 확장 단계에 있습니다.
xstr(foo)이 처리될 때:
#4는 문자열 리터럴이므로 "4"로 확인됩니다. 따라서 문자열화 작업은 텍스트 확장 후에 적용되므로 xstr(foo)는 "foo"가 아닌 "4"로 평가됩니다.
A Lesson in Macro Order
이것은 겉보기에 반직관적인 결과는 거시적 질서의 중요성을 강조합니다. 이러한 모호함을 피하기 위해 문자열화 작업을 적용하기 전에 도우미 매크로를 사용하여 한 단계를 실행하는 것이 권장되는 경우가 많습니다. 이렇게 하면 작업 순서를 명확하게 정의하여 원하는 결과를 얻을 수 있습니다.
위 내용은 C 전처리에서 매크로 확장 순서가 문자열화에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!