2011-01-20 5 views
2

OS가 관련이있는 경우 g ++을 Ubuntu 10.10 (64 비트)에서 사용하고 있습니다. 내가 뭔가 이상한 그래서 확인하기로 결정보고 어떤 이유로이 코드G ++ 4.4 "초기화되지 않은"변수

#include <iostream> 

int main() 
{ 
    int a; 

    std::cout << a << std::endl; 

    return 0; 
} 

는 항상 0이 분명히 g ++ 해당 널 (null) 값으로 초기화되지 않은 변수의 자동 초기화를 수행 인쇄합니다. 적어도이 기능을 해제하거나, 초기화되지 않은 변수를 사용하는 것에 대한 g ++ 표시 경고를 만드십시오. VS에서 컴파일 될 때 내 코드가 제대로 작동하지 않기 때문입니다. 게다가 나는 C++ 표준에서 암시 적으로 어떤 값으로 초기화되지 않은 변수는 정의되지 않은 값을 가질 수 있다는 것을 확신합니다. 가능한 값은 사실 프로그램의 모든 실행마다 달라야합니다. 운영 메모리는 실행될 때마다 사용됩니다.

명시 적 질문 : 초기화되지 않은 변수에 대해 g ++ 표시 경고를 표시하는 방법이 있습니까?

+1

-Wall http://www.network-theory.co.uk/docs/gccintro/gccintro_30.html – Anycorn

+0

실제 질문이 아닙니다. –

+1

"정의되지 않은"이란 의미는 그 표준이 어떤 일이 일어날 지 말하지 않는다는 것을 의미합니다. 사용 가능한 모든 구현이 모든 상황에서 똑같은 일을 할 가능성을 배제하지 않습니다. 특히, 당신이 다른 가치에 의지 할 수있는 경우에, 그것은 행동의 일종의 정의 일 것입니다. –

답변

7

GCC는 초기화되지 않은 변수를 0으로 초기화하지 않습니다. 단지 a0 인 경우입니다.

초기화되지 않은 변수를 사용할 때 경고 메시지가 나타나면 GCC 옵션 -Wuninitialized (-Wall 포함)을 사용할 수 있습니다.

그러나 초기화되지 않은 변수의 사용 가능성을 정적으로 파악할 수는 없습니다.이를 확인하기 위해 런타임 도구가 필요하며이를 위해 valgrind이 있습니다.

1

cppcheck과 같은 도구를 사용해보십시오. 일반적으로 잘 작성된 C++에서는 초기화하지 않고 변수를 선언하는 경우는 거의 없습니다.