2013-03-28 2 views
24

나는 내가 같은 함수 선언이 헤더 파일 가정하자 abc.h,이 정의되지 않는다 : 나는 abc.c에서이 헤더 파일을 포함하고 기능을 정의하고 사용기능은 정적 선언되었지만

static int function1(); 

을 그것. 정적 제거하지 않고,

warning: function1 declared static but never defined 

가 어떻게 경고를 제거 할 수 있습니다

static int function1() 
{ 
< function definition> 
} 

컴파일 후 나는 경고를 받고 있습니다. 감사합니다. .

+0

헤더의 원본 선언을 원본 파일로 이동 하시겠습니까? – simonc

+16

함수가'static' 인 경우 헤더 파일에 넣지 않아야합니다 ('inline' 제외) ... –

+0

@ H2CO3 또는 개인 헤더 – SomeWittyUsername

답변

23

정적 함수는 헤더 파일에서 선언 할 수 있지만 헤더 파일을 포함하는 각 소스 파일에 의도 한 것이 아닌 함수의 자체 복사본이있을 수 있습니다.

abc.h 파일을 다른 .c 파일에 포함시키지 않았습니까?

함수를 정적으로 선언하면 함수가 으로 정의되어 있어야합니다. 함수가 포함되어있는 .c 파일은입니다.

+0

동일한 문제가 발생했습니다. 분명히 헤더 파일이 아니라 .c 파일 안에 정적 선언 만 있어야합니다. Duh : D – AntonioCS

0

좋은 연습 :. 그 유일한 파일이기 때문에 그들이에 정의 된 소스 파일에 정적 함수를 선언 (또한 프로토 타입을 제공하십시오), 그들은에서 볼 수 있습니다

이 방법, 함수는 해당 파일 만 볼 수 있습니다 , 이러한 가시성 문제는 가능한 코드 충돌을 줄일 수 있습니다! 따라서 .c 파일에 프로토 타입과 정적 함수 정의를 제공하십시오. 헤더 파일에 정적 함수를 포함하지 마십시오. .h 파일은 외부 소비 용입니다.

중복 : Static functions in C