c와 cpp는 당연히 내부 함수 호출 방식 등 여러가지가 다르므로
컴파일시 같이 컴파일 하기 위해서는 컴파일러에게 이건 c코드다. 이건 cpp코드다 알려줘야
컴파일러가 알아먹고 링킹시에 적절한 라이브러리와 링크를 한다.
어떻게 알려주느냐? extern "C" 를 cpp 코드에 써주면 컴파일 시에 컴파일러가 알아서 c코드에서 해당
라이브러리를 가져와서 링킹한다.
검색해보니
----------------------------------------------------------
헤더파일에 프로토타입을 쓸때 다음과 같이 쓰면 된다.
extern "C" int printf....
extern "C" int sprintf....
extern "C" int vprintf....
extern "C" int fprintf....
근데 이거 귀찮지여.. 한두개면 몰라도 한 1000개쯤 되면 미칠 겁니다.
다음과 같이 쓰면 됩니다.
extern "C"
{
int printf...
int sprintf...
...
}
근데 이렇게 소스를 수정해 버리면 C++ 컴파일러에서는 문제가 없지만..
C 컴파일러가 extern "C" 를 알아 듣지 못하니 다시 C 컴파일러로 컴파일하자면 이번엔
C컴파일러가 불평을 합니다. 그래서 다음과 같이 씁니다.
#ifdef __cplusplus
extern "C"
{
#endif
int printf...
int sprintf...
...
#ifdef __cplusplus
}
#endif
__cplusplus는 모든 C++ 컴파일러가 내부적으로 가지고 있는 미리 정의된 define이져..
C 컴파일러는 없으니 #ifdef .. #endif 는 C 컴파일러로 컴파일할 때는 무시됩니다.
이제 문제가 없지여. C나 C++이나 다 쓸 수 있습니다.
보통 C++ 컴파일러들은 C 컴파일러를 같이 가지고 있습니다.
.C 는 C 컴파일러로 컴파일하고.. .CPP는 C++ 컴파일러로 컴파일하져.
컴파일시 같이 컴파일 하기 위해서는 컴파일러에게 이건 c코드다. 이건 cpp코드다 알려줘야
컴파일러가 알아먹고 링킹시에 적절한 라이브러리와 링크를 한다.
어떻게 알려주느냐? extern "C" 를 cpp 코드에 써주면 컴파일 시에 컴파일러가 알아서 c코드에서 해당
라이브러리를 가져와서 링킹한다.
검색해보니
----------------------------------------------------------
헤더파일에 프로토타입을 쓸때 다음과 같이 쓰면 된다.
extern "C" int printf....
extern "C" int sprintf....
extern "C" int vprintf....
extern "C" int fprintf....
근데 이거 귀찮지여.. 한두개면 몰라도 한 1000개쯤 되면 미칠 겁니다.
다음과 같이 쓰면 됩니다.
extern "C"
{
int printf...
int sprintf...
...
}
근데 이렇게 소스를 수정해 버리면 C++ 컴파일러에서는 문제가 없지만..
C 컴파일러가 extern "C" 를 알아 듣지 못하니 다시 C 컴파일러로 컴파일하자면 이번엔
C컴파일러가 불평을 합니다. 그래서 다음과 같이 씁니다.
#ifdef __cplusplus
extern "C"
{
#endif
int printf...
int sprintf...
...
#ifdef __cplusplus
}
#endif
__cplusplus는 모든 C++ 컴파일러가 내부적으로 가지고 있는 미리 정의된 define이져..
C 컴파일러는 없으니 #ifdef .. #endif 는 C 컴파일러로 컴파일할 때는 무시됩니다.
이제 문제가 없지여. C나 C++이나 다 쓸 수 있습니다.
보통 C++ 컴파일러들은 C 컴파일러를 같이 가지고 있습니다.
.C 는 C 컴파일러로 컴파일하고.. .CPP는 C++ 컴파일러로 컴파일하져.
[출처] *.C와 *.CPP를 같이 컴파일할때..|작성자 rhicky
'etc..' 카테고리의 다른 글
Union을 사용하는 경우 (0) | 2011.12.18 |
---|---|
다이얼로그의 포인터 얻어오기 (0) | 2010.11.06 |
쓰레드에서 dialog 의 updatedata()쓰는법 (0) | 2010.11.06 |
프로그래밍 습관 (1) | 2010.11.06 |
컴파일시 실행코드 사이즈 줄이는법 (0) | 2010.09.27 |