>  기사  >  백엔드 개발  >  ## C 11의 무제한 재귀는 정의되지 않은 동작으로 간주됩니까?

## C 11의 무제한 재귀는 정의되지 않은 동작으로 간주됩니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-26 00:59:02609검색

## Does Unbounded Recursion in C  11 Qualify as Undefined Behavior?

무제한 재귀는 무한 동작인가요?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.