무제한 재귀는 무한 동작인가요?
C 11에서 부작용이 없는 무한 루프는 다음과 같이 정의되지 않은 동작(UB)으로 간주됩니다. 다음 코드:
<code class="cpp">int main() { while (true) {} }</code>
이 동작은 C 표준에 따라 결정됩니다. 즉, 구현에서는 모든 스레드가 결국 종료되거나, I/O 작업을 수행하거나, 휘발성 개체에 액세스/수정하거나, 스레드가 실행될 것이라고 가정할 수 있음을 나타냅니다. 동기화 또는 원자적 작업.
다음 코드에 표시된 것처럼 이 정의가 무제한 재귀에도 적용되는지에 대한 의문이 생깁니다.
<code class="cpp">void foo() { foo(); } int main() { foo(); }</code>
C 표준에 따르면 두 가지 모두의 동작은 프로그램은 둘 다 비UB에 대한 표준 정의에 지정된 작업을 수행하지 않기 때문에 정의되지 않습니다.
그러나 C 표준이 무제한 재귀 UB를 고려하지 않더라도 여전히 발생할 수 있다는 점에 유의하는 것이 중요합니다. 재귀가 중첩된 재귀 함수 호출 수에 대한 구현 제한을 초과하는 경우 정의되지 않은 동작을 나타냅니다. 이는 항상 그래 왔으며 C 표준에서 루프의 상태가 UB인지에 관계없이 여전히 적용됩니다.
위 내용은 ## C 11의 무제한 재귀는 정의되지 않은 동작으로 간주됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!