2011-04-07 4 views
1

함수에 대한 헤더 파일과 그 함수를 다른 파일로 구현하는 방법은 무엇입니까? 또한, 어떻게 다른 파일에 main을 가지고이 함수를 호출 할 수 있습니까? 이 기능은 재사용 할 수있는 독립적 인 구성 요소가 될 것입니다.함수 헤더와 다른 파일에서의 구현 C

+0

가능한 중복 [헤더 파일과 cpp 파일이있는 이유는 무엇입니까?] (http://stackoverflow.com/questions/333889/in-c-why-have-header-files-and-cpp-files) – GWW

답변

0

C/C++에서 비 인라인 함수는 한 번만 정의해야합니다. 함수 정의 을 헤더 파일에 넣으면 헤더 파일이 두 번 이상 포함될 때 "다중 정의"링크 오류가 발생합니다.

+0

나는 헤더 파일에 func defn을 넣지 않을 것이다. 나는 선언과 구현을 포함하는 foo.h와 foo.c를 가질 것이다. 어떻게해야합니까? – Namratha

+0

귀하의 질문에 대해 혼란 스럽습니다. 분명히 할 수 있습니까? – burningice

+0

이 부분을 참조하십시오. 여기서 설명합니다. http://stackoverflow.com/questions/5575700/error-expected-asm-or-attribute-before-token-in-c/5575804#5575804 – Namratha

4

이것은 예제로 가장 잘 설명되어 있습니다.

정수의 큐브를 찾는 함수가 필요하다고합시다.

당신은

int cube(int x) { 
    return x * x * x; 
} 

cube.c 그런 다음 우리는 또 다른 파일의 기능 선언을 놓을 게요, 말하자면에서 정의 (구현) 할 것이다. 관습에 따라이 경우에는 header file, cube.h입니다.

int cube(int x); 

우리는 지금, driver.c 예를 들어, (C 프리 프로세서의 일부)를 #include 지시어를 사용하여 다른 곳에서 함수를 호출 할 수 있습니다.

#include "cube.h" 

int main() { 
    int c = cube(10); 
    ... 
} 

마지막으로 각 소스 파일을 개체 파일로 컴파일 한 다음 링크를 연결하여 실행 파일을 얻어야합니다.

한 사실 (특정 개체에 참조가 우승하지 않습니다 (예를 들어 라이브러리를 구현할 때) 당신이 더 나은 성능을 위해 헤더 파일의 모든 기능을 구현할 수있는 사실

$ gcc -c cube.c     #this produces a file named 'cube.o' 
$ gcc -c driver.c    #idem for 'driver.o' 
$ gcc -o driver driver.c cube.C#produces your executable, 'driver' 
1

예를 들어, GCC 사용 컴파일하지 마라.) 그런 식으로조차도 별도의 인터페이스와 구현이 있습니다; 물론 "다중 정의"오류를 피하기 위해 헤더 파일에 gurads를 포함하게 될 것입니다.