> 백엔드 개발 > C++ > 본문

변수 자체를 초기화하면 C에서 정의되지 않은 동작이 발생하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-28 09:27:29
원래의
504명이 탐색했습니다.

Why Does Initializing a Variable with Itself Lead to Undefined Behavior in C  ?

초기화되지 않은 변수 초기화: C의 역설

C에서는 자신을 통해서만 새 변수를 초기화하는 것이 유효한 것으로 간주된다는 것이 직관에 어긋나는 것처럼 보일 수 있습니다. . 이 개념을 이해하기 위해 다음 코드 조각을 분석해 보겠습니다.

<code class="cpp">int a = 3;
{
    int a = a;  // Initializing 'a' with itself
    cout << "new a = " << a << "\n";
    a = 5;
    cout << "a = " << a << "\n";
}
cout << "old a = " << a << "\n";</code>
로그인 후 복사

얼핏 보면 조각이 인쇄되어야 한다고 가정할 수 있습니다.

a=3
new a = 3
changed a = 5
old a = 3
로그인 후 복사

그러나 두 번째 줄은 종종 " 새로운 a = 0." 이것이 발생하는 이유를 파악하려면 C에서 변수 초기화의 복잡성을 조사해야 합니다.

구문적으로 코드는 'a' 선언이 내부 범위 내에서 초기화보다 앞서기 때문에 유효합니다. C에서는 변수 이름을 선언한 후, 값이 할당되기 전에도 사용할 수 있습니다. 이를 통해 스니펫에 사용된 것과 같은 자체 참조 초기화가 가능합니다.

그러나 동작 관점에서 초기화되지 않은 변수를 사용하면 정의되지 않은 동작이 발생합니다. 컴파일러는 경고를 발행할 수 있지만 변수 초기화를 위한 프로그램 흐름 분석의 복잡성으로 인해 그러한 발생을 플래그할 의무는 없습니다.

스니펫에서 'a'는 외부 범위 내에서 3으로 초기화됩니다. 내부 범위에 들어가면 외부 범위 변수와 동일한 이름으로 새로운 'a'가 선언됩니다. 이 내부 'a'는 자체 초기화되어 값이 정의되지 않습니다. 내부 범위 내의 내부 'a'에 5를 할당해도 외부 'a'에는 영향을 미치지 않습니다.

따라서 변수 자체를 초기화하는 것은 구문상 유효하지만 다음과 같은 가능성이 있으므로 주의해서 사용해야 합니다. 정의되지 않은 동작.

위 내용은 변수 자체를 초기화하면 C에서 정의되지 않은 동작이 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!