초기화 되지 않은 변수를 조건문에서 사용하면...
글쓴이: 나는오리 / 작성시간: 수, 2005/09/07 - 9:53오전
void foo() { int bar; if(!bar) return; }
위와 같이 bar가 초기화 되지 않은 int형 변수가
if문에서 조건으로 쓰여지면 !bar는 어떤 조건입니까?
void foo() { int bar; bar = 0; if(!bar) return; }
이것과 같은조건 아닌가요?
받은 소스에서 컴파일하는데 워닝나길래 찾아보니 초기화되지 않은 변수하나를
and조건에 걸어놨길래 ㅡ.ㅡ;;
참고로 VC++에서였습니다.
타 컴파일러도 동일조건일까요? ㅡ.,ㅡ?
Forums:
지역 변수가 가지게 되는 값은 아무도 모릅니다. 쓰레기 값이라고도 합니다
지역 변수가 가지게 되는 값은 아무도 모릅니다. 쓰레기 값이라고도 합니다. 대부분 초기화 누락에 의한 숨겨진 버그가 발생할 가능성이 높습니다.
만약 그 변수가 전역이나 static 이라면 0으로 초기화될 가능성이 있지만 이것도 플래폼에따라 그렇지 못한 경우가 분명히 있습니다.
여하튼 변수는 가능한 한 꼭 초기화 시켜서 사용해야 합니다.
bar라는 변수를 찍어보시면 되잔아요..
bar라는 변수를 찍어보시면 좋을듯..^^
0으로 초기화가 되는지...
함수에 변수 선언하면 그냥 쓰레기 값입니다.
이론적으로는 실행할때마다 값이 틀릴수 있으므로
쓰레기값을 신뢰하면 안되겠죠?
참고로 자바에서는 컴파일 오류납니다.
프로그래머가 실수 했을것이라고 컴파일러가 생각하는것이죠
C에서는 컴파일 오류 안나구요
@.@
[quote="bugiii"]지역 변수가 가지게 되는 값은 아무도 모릅니
그부분은 모회사제품의 라이브러리에 있는건데 ㅡ.ㅡ;;;
근데 그 모회사가 독일회사인데...;;;
미치겠군요. -_-;
VC++ 디버그 모드에서는 0으로 초기화 되는거 같던데요.물론 명
VC++ 디버그 모드에서는 0으로 초기화 되는거 같던데요.
물론 명시적으로 "디버그 모드에서 지역변수는 초기화 되지 않았을때, 값이 0이다" 라는 내용은 본적이 없습니다. 하지만, 경험상 항상 0이 되는거 같더군요 ^^
[quote="seoleda"]VC++ 디버그 모드에서는 0으로 초기화
제 윗선에 보고하니...
오랜기간 사용해왔는데 이상없는 라이브러리이니 당분간은 그냥 쓰자로 결과가 나왔습니다. -_-;
답변해주신 두분께 감사드립니다.
bar가 쓰레기값을 갖긴 하지만 실행 시간에 초기값이 0일 확률은 거의
bar가 쓰레기값을 갖긴 하지만 실행 시간에 초기값이 0일 확률은 거의 없습니다.
그런데 프로그램 로직상으로도 bar가 0일 확률이 적다면 겉으로 보기에는 문제가
없는 것처럼 보일 수도 있겠죠. 언제 터질지 모르는 시한폭탄을 안고 있는 거나
마찬가지입니다.
소스를 갖고 계시나 본데 그걸 수정할 수는 없나요? 아니면 그 독일회사에 문의를
해보시든지요.
VC 2003에서 저런 구문이 있으면 디버그 모드에서 지역변수 bar가
VC 2003에서 저런 구문이 있으면 디버그 모드에서 지역변수 bar가 초기화 되지 않고 사용됬다면서 런타임 예외가 발생하더군요..
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
윗분들 말씀을 들으니...음...아무래도 문의해보는쪽이 좋을것 같네요
윗분들 말씀을 들으니...
음...아무래도 문의해보는쪽이 좋을것 같네요.
시간나는데로 문의할곳을 찾아봐야겠네요.
한국 지사나 뭐 그런곳이 있는지...;;;
독어는 배운적이 없어서 ㅠ.ㅠ
그렇다고 영어도 못하니...
[quote="bugiii"]만약 그 변수가 전역이나 static 이
POD type에 대해서는 전역이나 static 변수는 규격적으로 zero-initialized, 즉 0으로 초기화 된다고 알고 있습니다.
그 플래폼에 따라 그렇지 못한 경우는 구체적으로 무엇을 말씀하시는지요 ?
[quote="pinetr2e"][quote="bugiii"]만약 그
현실이 그렇지 못하다는 것입니다. 임베디드나 8비트 CPU 용 컴파일러를 쓰는 경우에 0으로 초기화되지 않아서 발생하는 문제가 있는 경우가 있습니다. 제 기억으로는 VxD 드라이버를 만들 때도 그런 경우가 있었던 걸로 기억하고 있습니다.
댓글 달기