본문 바로가기
  • 쓸쓸한 개발자의 공부방
C++

[C++] header : iostream, cstdio, cstdlib,

by 심찬 2021. 8. 4.

[C++] header : iostream, cstdio, cstdlib,

 

C++ 헤더(header) 파일

 

c++ 에서 헤더 파일은 확장자를 사용하지 않는다.

 

기존 c헤더를 대신하는 새로운 헤더 파일을 제공한다.

<stdio.h> ----> <cstdio>

<stdlib.h> ----> <cstdlib>

* 기존 c헤더보다 새로운 헤더 형태 사용을 권장한다.

 

#include <algorithm>
//#include <stdio.h>    // 사용가능하지만 <cstdio> 사용을 권장함.
#include <cstdio>

int main()
{
    printf("%d\n", std::max(1,2));
}


 

 

stdio.h 와 cstdio 의 차이

 

<stdio.h>

printf() 등의 표준 함수가 global namespace에 있다.

 

<cstdio>

printf() 등의 표준 함수가 std 이름 공간에 있다.

표준은 아니지만 대부분의 컴파일러는 global namespace에도 printf등의 표준 함수를 제공한다.

 

 

 

c에서 사용하는 방식 그래도 <stdio.h> 를 사용할 때 아래와 같이 printf 를 지원한다.

#include <stdio.h>

int main()
{
    printf("hello\n");
}

 

 

<stdio.h> 를 사용할 때 std::printf는 사용이 불가하다.

#include <stdio.h>

int main()
{
    std::printf("hello\n");
}

 

<cstdio>를 사용하면 std::printf 사용이 가능하다. printf() 등의 표준 함수가 std 이름 공간에 있기 때문이다.

#include <cstdio>

int main()
{
    std::printf("hello\n");
    printf("hello\n");       // <cstdio> 는 둘 다 지원
}


printf() , std::printf() 둘 다 사용이 가능하게 하는 방법

 

아래 코드는 문제없이 컴파일이 된다.

분명 foo는 global에만 정의 되어 있는데 Lego 안에 정의된 using ::foo; 가 있어 자연스럽게 연결이 된다.

void foo() { }

namespace Lego
{
    using ::foo;   // Lego 안에서 global에 있는 foo()를 사용할 수 있다.
    void init() {}
}

int main()
{
    foo();        // global에 선언된 foo 호출됨.
    Lego::foo();  // Lego 안의 foo는 global의 foo로 연결되어 있으니 global foo가 호출됨.
}

 

<iostream>

iostream 에서 cout, cin 만 사용했는데... 생각보다 별다른건 없다는 사실을 알게 되었답니다.ㅎㅎ

https://en.cppreference.com/w/cpp/header/iostream

 

Standard library header - cppreference.com

This header is part of the Input/output library. Including behaves as if it defines a static storage duration object of type std::ios_base::Init, whose constructor initializes the standard stream objects if it is the first std::ios_base::Init object to be

en.cppreference.com

 

<cstdio>

cstdio 헤더에 있는 function 들은 뭐가 있을지 궁금하니 아래에서 확인 가능하다.

https://en.cppreference.com/w/cpp/header/cstdio

 

Standard library header - cppreference.com

This header was originally in the C standard library as . This header is part of the C-style input/output library. Types object type, capable of holding all information needed to control a C I/O stream (typedef) [edit] complete non-array object type, capab

en.cppreference.com

 

 

<cstdlib>

cstdlib 헤더에 있는 function들도 확인해 본다.

 

https://en.cppreference.com/w/cpp/header/cstdlib

 

Standard library header - cppreference.com

This header was originally in the C standard library as . This header provides miscellaneous utilities. Symbols defined here are used by several library components. [edit] Synopsis namespace std { using size_t = /* see description */; using div_t = /* see

en.cppreference.com

 

 

 

댓글