C에선 헤더를 명시해주지않아도 대부분의 함수는 돌아가더라구요.
그런데 C++ 에서는 다 잡아줘야했습니다.
컴파일 옵션때문이 아닐까 싶습니다만..
C++의 표준 함수들은 각각 그것이 정의되어 있는 헤더파일이 C++ 표준 스펙에 정의되어 있습니다.
예를 들어 memset 의 경우는 <cstring> 또는 <string.h>에 정의되어 있고,
어떤 컴파일러를 써도 이 헤더를 include 하면 memset이 잘 정의됨을 보장받을 수 있습니다.
그러나 각 컴파일러 구현체들은 내부적으로 헤더간의 의존성이 다르기 때문에 특정 헤더를 include하지 않아도 자동으로 include 될수 있습니다.
하지만 이는 어디에도 약속되지 않은 것이고 표준도 아니기 때문에, 안 되더라도 어쩔수 없습니다. 그냥 그 특정 환경에서만 되는겁니다.
"visual studio는 너무 똑똑해서 알아서 다 해준다. 근데 gcc는 멍청해서 그런거 안해준다."
저는 이 말이 굉장히 거슬리는데, 특정 컴파일러가 똑똑하거나 멍청한게 아니고 표준을 구현하는 방식이 다를 뿐입니다. (엄밀하게는 유저가 사용을 잘못한것)
결론: 표준을 따르면 어디서도 문제가 안생깁니다.
댓글을 작성하려면 로그인해야 합니다.
sgc109 9년 전
이 사이트 채점결과로는 컴파일 에러가 나는데 제 pc(windows 8)의 visual studio 2010 에서는 #include<stdlib.h> 를 하지 않아도 atoi 를 사용하는
부분에서 문제가 없었고, 또 ubuntu 에서 vi 로 똑같은 소스코드를 작성해서 g++ 로 컴파일 했을때도 전혀 문제가 없었는데 왜 이런건가요??
컴파일러 버전에 따라 굳이 명시를 하지않아도 자동으로 헤더를 포함시켜주기라도 하는건가요??