오늘 일을 하면서 알아낸 사실

만약 각 소스들이 이렇게 입력되어있다면
test1.h
#ifndef _TEST_h
#define _TEST_h

#include<stdio.h>
void printtest();
#endif

test1.c
void printtest()
{
printf("%d",1);
}

위의 소스를 include한 다른 소스

test2.h
#include<stdio.h>
#include "test1.h"
void test();

test1.c
void test()
{
printtest();
}

이렇게 정의하여 프로그램을 진행한다면 문제가 되지 않는다. 다만 어제와 오늘 삽질했던일은 무엇이냐면

test3.h
#include "test2.h"

test3.cpp
void maintest();
void maintest()
{
test();
}
위의 소스가 문제이다. 생각해서는 test2.h를 include를 했기 때문에 test()함수를 쓸수 있다라고 생각하겠지만 사실 이렇게하면 에러가 생긴다 -_-;

그래서 이 에러를 수정하기 위해서는

test2.h
#include<stdio.h>
#include "test1.h"
extern "C" {
void test();
}

test3.h
#include "test2.h"

test3.cpp
extern void test();
void maintest();
void maintest()
{
test();
}

다음과 같이 정의를 해주어야 외부함수를 호출할 수가 있다.
내 머리속과 컴퓨터 머리속은 다른가보다 extern은 알았지만 test2.h에서 extern void test(); 이렇게 선언만 해주고 다른 소스에서 쓸려니 안되어서 찾아봤더니 위와같이 하면 처리할수 있었다.
다음에 그림으로 추가 설명하겠다.

+ Recent posts