메뉴 건너뛰기


Developer > Application

C,C++ C++ 에서 C 함수의 사용하기

2013.11.26 22:29

푸우 조회 수:17657


 
main.cpp 와 hello.c 그리고 hello.h 로 이루어진 화일이 있다. hello.c 에는 void 형의 hello() 란 함수가 정의되어 있고, hello.h 에는 hello() 함수의 원형이 선언되어 있다.
main.cpp 함수에서 이 hello 함수를 사용하길 원한다면, 언뜻 아래와 같은 방법으로 컴파일 하려고 시도할 것이다.

gcc -c hello.o 
g++ -o hello main.cpp hellow.o 

그러나 이를 컴파일 해보면 아래와 같은 에러가 발생한다.

/tmp/ccr6TqS7.o: In function `main':
/tmp/ccr6TqS7.o(.text+0x7): undefined reference to `hello(void)' 

이런 일이 발생하는 이유는 C와 C++의 각 컴파일러가 알고 있는 함수 이름이 서로 틀릴수 있다는 데에서 발생한다. C++ 에서는 같은 함수이름이 overloading 를 통해서 여러개 존재할수 있지만 C에서는 오직 하나만 존재할수 있음으로, 실지 사용할 함수명을 리턴값과 인자값 까지 명시 해서 컴파일러에게 정확하게 알려줄 필요가 있다.
이럴경우 extern "C" {함수} 를 사용하면 된다.

extern "C" { void hello(); } 

예제 코드
main.cpp
extern "C" { void hello(); }
int main()
{
    hello();
}
hello.c
#include "hello.h"
#include <stdio.h>

void hello()
{
    printf("hello world!!");
}

번호 제목 글쓴이 날짜 조회 수
38 Windows에서 GetLastError()의 에러 메시지 내용 출력하기 푸우 2013.11.27 17576
37 윈도우즈, 유닉스, C라이브러리 비교 - Securing Windows Objects 푸우 2013.11.27 27551
36 윈도우즈, 유닉스, C라이브러리 비교 - Asynchronous I/O 푸우 2013.11.27 27406
35 윈도우즈, 유닉스, C라이브러리 비교 - Interprocess Communication 푸우 2013.11.27 29919
34 윈도우즈, 유닉스, C라이브러리 비교 - Thread Synchronization 푸우 2013.11.27 29468
33 윈도우즈, 유닉스, C라이브러리 비교 - Threads and Scheduling 푸우 2013.11.27 28012
32 윈도우즈, 유닉스, C라이브러리 비교 - Process Management 푸우 2013.11.27 29485
31 윈도우즈, 유닉스, C라이브러리 비교 - Memory Management, Memory-Mapped Files, and DLLs 푸우 2013.11.27 31700
30 윈도우즈, 유닉스, C라이브러리 비교 - Exception Handling 푸우 2013.11.27 28021
29 윈도우즈, 유닉스, C라이브러리 비교 - File and Directory Management 푸우 2013.11.27 36739
28 BASE64 인코딩 디코딩 file 푸우 2013.11.27 24882
27 mms client file 푸우 2013.11.26 17149
26 The SNIPPETS Portable C++ Source Code Archive file 푸우 2013.11.26 24171
25 The SNIPPETS Portable C Source Code Archive file 푸우 2013.11.26 18326
24 Email 포맷인 eml파일의 필터링을 위한 라이브러리 file 푸우 2013.11.26 18268
23 Linux, Unix에서 라이브러리 만들기 file 푸우 2013.11.26 17818
22 Zlib를 이용한 프로그래밍 푸우 2013.11.26 17974
21 Bit Field를 이용한 구조체 크기 줄이기 푸우 2013.11.26 16528
» C++ 에서 C 함수의 사용하기 푸우 2013.11.26 17657
19 MD5 라이브러리 file 푸우 2013.11.26 14828