티스토리 뷰
다음과 같은 C 코드를 살펴보자.
#include <stdio.h>
int main()
{
float f;
scanf("%f", &f);
return 0;
}
이 얼마나 간단명료한 코드인가! 에러가 나올 만한 부분이 전혀 없어 보인다. 하지만 Visual C++에서 이 코드를 실행시키면 어이없게도 런타임 에러가 뜬다.
결론부터 말하자면, 이건 Visual C++의 버그다.
scanf나 printf에서 "%f"를 이용해 실수를 입력받는 라이브러리는 엄청 크기가 크다. 그래서 Visual C++의 컴파일러는 이 라이브러리가 불필요하다고 판단되었을 경우에 아예 라이브러리를 실행파일에 포함시키지 않는다.
문제는, 위의 코드처럼 실수를 입력받는 부분이 있더라도, 실수 변수를 한 번도 사용하지 않았다면 실수 입력이 불필요한 것으로 판단해 버린다는 것이다. 그러므로 "강제로 실수 변수를 사용하도록 만들면" 더 이상 에러가 발생하지 않게 된다. 예를 들어서 아래의 코드는 정상적으로 실행된다.
#include <stdio.h>
int main()
{
float f = 1;
scanf("%f", &f);
return 0;
}
물론 Visual C++의 컴파일러가 아닌 다른 C/C++ 컴파일러를 사용해도 에러가 발생하지 않는다.
'기억하자정보 > 기타' 카테고리의 다른 글
윈도우 API 예제 (0) | 2006.10.02 |
---|---|
IEEE 754 소스 (0) | 2006.09.26 |
자료형과 2에 대한 보수(2's complement) (0) | 2006.09.25 |
IEEE 754 - 부동소수점 표기법 (0) | 2006.09.25 |
데이터형에 따른 메모리 구조와 연산 (0) | 2006.09.25 |
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.