#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과정이 일어난다고 할 수 있다.