[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
<cstdio>
cstdio 헤더에 있는 function 들은 뭐가 있을지 궁금하니 아래에서 확인 가능하다.
https://en.cppreference.com/w/cpp/header/cstdio
<cstdlib>
cstdlib 헤더에 있는 function들도 확인해 본다.
https://en.cppreference.com/w/cpp/header/cstdlib
'C++' 카테고리의 다른 글
[C++] 변수 선언 : uniform initialize, auto, decltype, using (0) | 2021.08.06 |
---|---|
[C++] cout, cin, iomanipulator (0) | 2021.08.05 |
[C++] using namespace std; (0) | 2021.08.03 |
[C++] namespace, using (0) | 2021.08.02 |
Online C++ compiler (무료 온라인 C++ 컴파일러) (0) | 2021.08.01 |
댓글