초기화되지 않은 변수의 수수께끼 탐구: 이상한 값이 나타나는 이유
코딩 영역에서 초기화되지 않은 변수는 당황스러운 결과를 초래할 수 있습니다. 그러한 변수를 인쇄하려고 시도할 때 이러한 수수께끼 중 하나가 발생하여 수수께끼 같은 숫자 출력으로 이어집니다.
이 수수께끼를 풀기 위해 제공된 C 코드를 살펴보겠습니다.
int var; cout << var << endl;
정수 변수 var를 선언합니다. 초기값 없이. var를 인쇄하면 2514932와 같은 임의의 숫자가 생성됩니다. 이는 초기 값이 없는 변수가 메모리에 저장된 임의의 비트를 나타내는 가비지 데이터를 보유하기 때문입니다.
마찬가지로, 초기화되지 않은 이중 변수 var를 인쇄할 때도 마찬가지로 예상치 못한 결과가 발생합니다. 1.23769e-307과 같은 값이 나타날 수 있습니다. 이 역시 초기 내용의 정의되지 않은 성격에서 비롯됩니다.
정의되지 않은 동작의 위험
근본적인 문제는 "정의되지 않은 동작"이라는 개념에 있습니다. C에서는 초기화되지 않은 변수에 액세스하면 이 규칙을 위반하므로 예측할 수 없는 결과가 발생합니다. 컴파일러는 이러한 상황을 우아하게 처리할 의무가 없으며 본질적으로 "당신이 원하는 대로 하십시오. 나는 어떤 책임도 지지 않습니다."
실천 결과
자 실제 사례를 통해 이를 설명합니다.
#include <iostream> const char* test() { bool b; // uninitialized switch (b) // undefined behavior! { case false: return "false"; // garbage was zero (zero is false) case true: return "true"; // garbage was non-zero (non-zero is true) default: return "impossible"; // options are exhausted, this must be impossible... } } int main() { std::cout << test() << std::endl; }
직관적으로 기능 테스트를 기대할 수 있습니다. 참값과 거짓 값에 대한 옵션이 모두 포함되므로 "불가능"을 반환하지 않습니다. 그러나 정의되지 않은 동작은 불가능을 가능하게 만들 수 있습니다. g -02로 코드를 컴파일하면 이러한 현상이 나타날 수 있습니다.
결론
초기화되지 않은 변수와 관련된 예측할 수 없는 동작을 방지하려면 적절한 값으로 초기화하는 것이 중요합니다. . 이 간단한 방법을 통해 코드가 정의되지 않은 동작의 어두운 영역을 탐구하지 않고 프로그램이 의도한 대로 작동하도록 할 수 있습니다.
위 내용은 C에서 초기화되지 않은 변수가 무작위 값처럼 보이는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!