C 및 C 영역에서 "문자열화"라는 용어는 매크로 인수를 문자열 리터럴로 변환하는 것을 의미합니다. . 그러나 다음 시나리오에서 볼 수 있듯이 프로세스가 복잡할 수 있습니다.
#define foo 4 #define str(s) #s
이 경우 문자열화 프로세스(# 연산자)가 매크로보다 먼저 실행되기 때문에 str(foo)는 "foo"를 출력합니다. 확장(#define 지시어). 이렇게 하면 foo가 매크로 이름으로 유지되고 해당 값으로 대체되지 않습니다.
그러나 다음 코드 조각은 다른 결과를 생성합니다.
#define xstr(s) str(s) #define str(s) #s #define foo 4
xstr(foo)가 호출되면 출력은 "4"가 됩니다. 이 동작을 이해하려면 매크로 확장의 복잡성을 자세히 조사해야 합니다.
C 및 C 표준에 따르면 매크로 확장 프로세스에는 다음 단계가 포함됩니다.
xstr(foo)의 경우 :
여기서 중요한 차이점은 매크로 인수가 대체되는 단계(2단계)에 있습니다. 첫 번째 예에서 str(foo)를 사용하면 1단계에서 문자열화가 적용된 후 2단계가 발생합니다. 따라서 foo는 대체되지 않고 출력은 "foo"로 유지됩니다.
이 문제를 해결하기 위해 도우미 매크로 xstr이 사용됩니다. 매크로를 중첩하면 먼저 2단계에서 인수 대체를 수행한 다음 1단계에서 문자열화를 적용하여 원하는 결과 "4"를 얻을 수 있습니다.
위 내용은 매크로 확장 순서가 C와 C의 문자열화에 어떤 영향을 미칩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!