reference:
"명품 C++ Programming" / 황기태
"전문가를 위한 C++" / 마크 그레고리
<iostream>에 숨은 진실c/c++ 컴파일러는 컴파일 전 우선 전처리기를 실행시켜 #include문을 모두 처리한다. 전처리기는 컴파일러에 의해 내부적으로 호출된다.
전처리기는 #include 문에 지정된 헤더 파일의 텍스트를 include 문 자리에 삽입한다. 이를 헤더 파일의 확장이라 한다. 만일 헤더 파일 내에 또 다른 include 문이 내포되어 있으면, 다시 그 자리에 '헤더 파일 확장'이 일어난다. 모든 확장이 완료되면 전처리기는 종료한다.

<iostream> 헤더 파일의 위치표준 라이브러리 헤더 파일이므로 텍스트 파일로서 컴파일러가 설치된 폴더의 'include' 폴더에 존재한다.
c언어에서 c 표준 라이브러리 헤더 파일의 확장자는 .h이다. 반면 c++ 표준부터 헤더 파일에 확장자를 붙이지 않는다.
#include <string.h> // c라이브러리 함수를 사용하는 경우 .h를 가진 헤더 파일을 허용하고 있지만 표준은 아님
#include <cstring> // c++ 표준 방식
<cstring> 헤더를 예로 들겠다.
<cstring> 헤더 파일에는 strcpy() 함수의 선언(원형)만 들어있으며, 컴파일 할 때 strcpy() 함수의 호출이 정확한지 판단하는데 사용된다.
strcpy() 함수의 코드는 이미 컴파일된 기계어 형태로 c 라이브러리(Object)에 들어있다. 실행 중에 strcpy()가 호출되면 c 라이브러리의 코드를 호출하지 <cstring> 헤더 파일에 있는 무언가를 호출하는 것이 아니다.