2013-01-16 3 views
0

메인 C 파일에 외부 함수를 가져 오는 데 문제가 있습니다.extern keywod를 사용하는 c의 가져 오기 기능

여기 내 최소한의 코드입니다

/* main.c */ 

#include<stdio.h> 
extern int func() 

int main(){ 
    extern int func(); 
} 

/*external file with one function that I want to  
import*/ 

#include<stdio.h> 

int func(){ 
    printf("Hello World Again\n"); 
} 

내가 컴파일하고 다음과 같이 실행 - GCC main.c에 및 ./a.out 다음 하지만 아무것도 발생하지 않습니다. 아이디어가 있으십니까?

+0

함수가 있다고 선언하면 아무 것도 호출하지 않습니다. 당신은'main()'이 값을 돌려주지 않는다. – WhozCraig

답변

4

을 또한

gcc -Wall main.c external_file.c 

(컴파일러 명령에 -Wall 절대적으로 필요한 것은 아니지만 아주 좋은 방법입니다 참고) func를 포함하는 파일을 컴파일해야

다른 사람들이 언급했듯이 다시 선언하기보다는 func을 호출하도록 코드를 수정해야합니다. 질문이 변경되었습니다

+0

감사합니다. 그것은 나를 도왔다. – carousel

2

으로 선언되었으므로 결코 부르지 않았습니다!

extern int func(); 

기능을 선언합니다. 를 호출하려면 다음이 필요합니다

int main() 
{ 
    func(); 
} 
0

당신은 단지의 주요 기능을 다시 선언하는 ..

당신은 #이

extern int func() 

int main(){ 
    func(); 
} 

/*external file with one function that I want to  
import*/ 

#include<stdio.h> 

int func(){ 
    printf("Hello World Again\n"); 
} 
0

편집을 포함 .. 작동하도록 함수를 호출 할 필요가있다.

extern은 외부 변수에만 사용됩니다. 함수의 원형 만 있으면됩니다.

몇 가지 유의하십시오. int func()이라는 프로토 타입은 의 매개 변수 확인이 없음을 의미합니다 (C에서). 이것은 C++과 다릅니다. 또한 함수에서 아무 것도 반환하지 않으므로 대신 바꿀 수 있습니다. void func(void)

+0

Extern은 변수와 함수 모두에 사용됩니다. 그러나 함수 원형 'void func (void);'는 extern void func (void)와 동일하게 발생합니다. extern 키워드는 첫 번째 경우에 암시 적입니다. 엄밀히 말하자면, C는 두 가지 종류의 함수를 허용합니다. 정적 또는 외부 키워드에 해당하는 내부 또는 외부 연결이 있습니다. 하지만 extern은 함수 프로토 타입에 대한 기본값이므로 쓸 필요가 없습니다. – Lundin

+0

@ Lundin : 예, 맞습니다. 하지만 "외부 변수에 대해서만 사용됩니다"라고 말했지만 "사용할 수 없습니다"라고했습니다. OP는 C 코드 구조를 오해 한 것으로 보이는데, 'extern'은 더 혼란 스러울뿐입니다. – cdarke