2013-02-02 3 views
0

간단한 설정 : 기능 및 기능 구현을위한 프로토 타입이 n 개 있습니다. 하나의 큰 함수 포인터 배열이 있습니다. 각 함수는이 배열에 나열됩니다. gcc로 컴파일 할 때 여전히 기능을 수행하는 경우도 있습니다.컴파일러가 사용되지 않는 함수를 경고하도록하는 원인은 무엇입니까?

코드 :

void foo1(void); 
void foo2(void); 
void bar1(void); 
void bar2(void); 

/* and their implementations */ 

void (*functions[])(void) = { foo1, foo2, bar1, bar2 }; 

이 설정이 (그냥 예) 모습입니다! 이 foo/bar 함수 중 하나는 gcc로 컴파일 할 때 -Wunused-function 경고를 발생시킵니다. 다른 사람들은 그렇지 않습니다. 왜? 정적 함수 선언 아니지만 항 또는 비 인라인 정적 함수가 미사용 될 때마다

+2

경고를 얻기 위해 실제로 컴파일 할 수있는 것을 게시 할 수 있습니까? – cnicutar

+0

gcc (4.7.1)가 경고를 내도록 설득 할 수 없습니다. 어떤 버전을 사용하셨습니까? –

+0

글쎄, 실제 코드는 훨씬 더 복잡합니다. 몇 가지 오류가 있으며 현재 링크하지 않지만 원할 경우 컴파일 할 수 있습니다. http://beyermatthias.de/git/index.php?p=minx.git&a=shortlog&h=refs/heads/split_source gcc 버전은 4.7.2입니다. – musicmatze

답변

4

-Wunused 기능

는 경고. 이 경고는 -Wall에 의해 활성화됩니다.

이 경고는 함수가 정의 함수가 선언 될 때 (프로토 타입)하지만 사용 적이없는 경우 모두를 트리거 것으로 보인다.

신고하신 기능을 구현하지 않으셨습니까?

+0

정의없이 함수를 사용하면 컴파일러 경고가 아닌 링커 오류가 발생합니다. – cnicutar

+0

흠. 네, 확신합니다. 이것은 나에게 이상하다! – musicmatze

+0

@cnicutar : 실제로 전화하지 않는 경우가 아닙니다. –