변수 초기화와 정의되지 않은 동작
C에서는 변수 자체를 초기화하는 것이 유효한가요? 다음 코드 예제에서는 이 특이한 구문을 살펴봅니다.
<code class="cpp">int main() { int a = 3; { int a = a; // Initialization by itself } }</code>
얼핏 보면 이 코드가 "a=3nnew a = 3nchanged a = 5nold a = 3n"을 인쇄할 것으로 예상할 수 있습니다. 그러나 실제로는 출력의 두 번째 줄에 "new a = 0"이 포함됩니다. 이 동작은 직관에 반하는 것처럼 보이며 초기화 구문이 "int a = a;"인 이유에 대한 질문을 제기합니다. 전혀 유효합니까?
구문 타당성
변수 선언이 초기화자보다 앞에 있으므로 구문 자체가 유효합니다. 이는 변수 이름이 값을 갖기 전에 액세스할 수 있음을 의미합니다. 이는 다음과 같은 비정상적인 초기화를 허용합니다:
<code class="cpp">void *p = &p;</code>
변수의 값이 합법적이지 않더라도 변수의 이름이 합법적으로 사용되는 경우
정의되지 않은 동작
구문적으로는 정확하지만 변수 자체를 초기화하는 동작은 아직 정의되지 않았습니다. 초기화되지 않은 변수를 사용하려고 하면 정의되지 않은 동작이 발생합니다. 컴파일러는 이와 같은 간단한 경우에 대해 경고를 발행할 수 있습니다.
이 특정 예에서 내부 범위 내의 초기화되지 않은 변수 "a"는 참조되기 전에 값 0이 할당됩니다. 따라서 두 번째 인쇄물에는 "new a = 0"이 표시됩니다.
정의되지 않은 동작이 항상 즉각적인 오류나 충돌로 이어지는 것은 아니라는 점에 유의하는 것이 중요합니다. 컴파일러는 이러한 코드의 결과를 보장할 수 없으므로 예측할 수 없고 잠재적으로 잘못된 결과가 발생할 수 있습니다.
위 내용은 C에서 변수 자체를 초기화하는 것이 유효하며 그 의미는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!