header파일의 의미

김대익·2022년 2월 21일
0
#include <iostream>
using namespace std;
int main() {
	foo();
    return 0;
}

void foo() {
	cout << "foo" << '\n';	
}

라하고 g++ test.cpp -o foo -Wall -Werror로 컴파일하게 되면 컴파일이 되지 않는다.
main함수에서 foo함수를 호출하는데 어디있는지 알 수 없기 때문이다.

이를 그림으로 보면 컴파일과정으로 test.o가 만들어진 후 실행파일로 만드는 Linking과정 중에
foo라는 function call을 찾을 수 없어
라는 에러가 나오게 된다.


#include <iostream>
using namespace std;
void foo();

int main() {
	foo();
    return 0;
}

void foo() {
	cout << "foo" << '\n';	
}

로 하고 실행하면 되는데 앞의 void foo()가 이러한 함수가 있다고 알려주는 declaration을 해주기 때문이다.

g++ test.cpp -c를 하면 기계어인 오브젝트파일을 생성하고
g++ test.cpp -s를 하면 사람이 읽을 수 있는 어셈블리파일을 생성한다.


만약 foo함수가 다른 파일안에 있다고 한다면

foo.h파일이 생성되어 main.cpp에 ctrl+c,v되어 하나의 translation unit으로 만들어주고 compilation, linking과정이 일어난다고 할 수 있다.

0개의 댓글