c++ cstdlib 없이도 atoi가 에러 없이 수행되는 이유가 궁금합니다.

조회수 527회

char* 배열을 int로 바꿔서 다루는 문제를 풀고 있습니다.

저는 atoi()가 cstdlib에 포함되어 있다고 알고 있었고,

교수님의 ppt에서도 atoi를 쓸 때면 항상 cstdlib가 include 되어 있었는데,

이번에 과제를 하면서 cstdlib 없이 iostream만 포함했는데도 에러 없이 잘 실행되는 것을 관찰했습니다.

아래는 해당 코드입니다. 왜 에러가 안 나는 건지 너무 궁금합니다...

이미지

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • iostream 헤더파일 안에서 다른 헤더파일들을 인클루드하고 있는데, 그 다른 헤더파일들이 다시 또다른 헤더 파일들을 인클루드하고 있습니다. 그 과정 속에서 어떤 한 헤더 파일이 cstdlib를 인클루드하고 있기 때문에 에러가 나지 않은 것입니다.

    아래 코드를 컴파일하면 에러가 날거고요. iostream의 주석을 해제하고 컴파일하면 에러가 나지 않을 겁니다.

    //#include <iostream>
    #include <cstdio>
    
    using namespace std;
    
    int main()
    {
        printf("%d,", atoi("1234"));
    }
    

    장기적으로 보면 헤더 파일의 내부 구현은 바뀔수도 있고, 그러면 인클루드한 헤더 파일이 달라질수도 있기 때문에, 특정 함수를 사용할 때에는 그 함수를 포함하는 헤더 파일을 정확히 인클루드해야 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)