컴파일 시 C 문자열 길이 계산
C에서는 컴파일 중에 문자열 리터럴에 대한 계산을 수행할 수 있습니다. 다음 코드 조각을 고려하십시오.
<code class="c++">#include <cstdio> int constexpr length(const char* str) { return *str ? 1 + length(str + 1) : 0; } int main() { printf("%d %d", length("abcd"), length("abcdefgh")); }</code>
이 코드는 재귀 함수를 활용하여 컴파일 타임에 지정된 문자열 리터럴의 길이를 결정합니다. 결과를 인쇄하여 함수가 문자열 길이(예: 4와 8)를 올바르게 계산하는지 확인할 수 있습니다. 결과 어셈블리 코드는 이러한 계산이 컴파일 중에 수행된다는 것도 보여줍니다.
그러나 중요한 질문은 남아 있습니다. 이 길이 함수의 평가는 C 표준에 따라 컴파일 타임에 발생하도록 보장됩니까?
답은 생각만큼 간단하지 않습니다. C 표준 초안(섹션 5.19)에 따르면 상수 표현식은 "번역 중에 평가될 수 있습니다." 그러나 이는 단지 비표준적인 참고 사항일 뿐이며 확고한 보장은 아닙니다.
컴파일 시간 평가를 보장하기 위해 두 가지 전략을 활용할 수 있습니다.
따라서 표준에서는 길이 함수가 컴파일 시간에 평가되도록 명시적으로 요구하지 않지만 이를 상수 표현식으로 활용하거나 constexpr 변수를 초기화하여 그러한 평가를 시행할 수 있습니다. 이 방법을 사용하면 컴파일 중에 해시 계산이나 복잡한 문자열 조작 수행 등 문자열 리터럴에 대한 정교한 계산을 수행할 수 있는 가능성이 열립니다.
위 내용은 C에서 컴파일 타임에 재귀 문자열 길이 함수의 평가가 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!