부작용 없는 재귀는 정의되지 않은 동작인가요?
C 11에서 다음과 같이 부작용이 없는 무한 루프는 정의되지 않은 것으로 간주됩니다. 동작(UB):
<code class="cpp">int main() { while (true) {} }</code>
이 동작은 다음과 같은 ISO C 11 표준(1.10p24)의 조항으로 인해 UB입니다.
The implementation may assume that any thread will eventually do one of the following: - terminate, - make a call to a library I/O function, - access or modify a volatile object, or - perform a synchronization operation or an atomic operation.
이 조항은 두 가지 모두에 적용됩니다. 루프 예제 및 다음 재귀 프로그램:
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
이 재귀 프로그램에는 부작용이 없지만 모든 스레드가 결국 나열된 작업 중 하나를 수행한다는 가정을 위반하므로 UB로 간주됩니다. 1.10p24.
이 조항이 존재하지 않더라도 중첩된 재귀 함수 호출에 대해 구현에서 정의한 제한을 초과하면 재귀가 여전히 정의되지 않은 동작을 나타낼 수 있습니다. 버전에 관계없이 C에서는 항상 이런 일이 있었습니다.
위 내용은 ## 부작용 없는 재귀는 C에서 정의되지 않은 동작인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!