2013-03-28 18 views
24

Mam plik header Załóżmy abc.h, gdzie mam deklarację funkcji jak:funkcja static ale nigdy zdefiniowane

static int function1(); 

mam włączone tego pliku nagłówka w abc.c i zdefiniował funkcję i używane to.

static int function1() 
{ 
< function definition> 
} 

Po kompilacji otrzymuję ostrzeżenie:

warning: function1 declared static but never defined 

Jak mogę usunąć ostrzeżenie, bez usuwania statyczne. Dzięki.

+0

Move deklaracja przodu z nagłówka do pliku źródłowego? – simonc

+16

Jeśli funkcja jest 'static', ty nie powinien umieścić go w pliku nagłówkowym (chyba' inline') ... –

+0

@ H2CO3 lub prywatny nagłówek – SomeWittyUsername

Odpowiedz

23

Funkcja statyczna może być zadeklarowane w pliku nagłówka, ale to spowoduje, że każdy plik źródłowy dołączony plik nagłówka mieć własną kopię funkcji, która prawdopodobnie nie jest to zamierzone.

Czy na pewno nie zamieściłeś pliku abc.h w żadnym innym pliku .c?

Ponieważ deklarowanie funkcji jako statycznej, wymaga, aby funkcja była zdefiniowana w wszystkich plikach .c (s), w których jest zawarta.

+0

Miałem ten sam problem. Oczywiście powinienem mieć tylko deklaracje statyczne wewnątrz pliku .c, a nie w pliku nagłówkowym. Duh: D – AntonioCS

0

Dobra praktyka:. Declare funkcji statycznych w pliku źródłowym są zdefiniowane w (proszę podać również prototyp), ponieważ jest to jedyny plik są one widoczne w

ten sposób funkcja jest widoczna tylko dla tego pliku , takie problemy z widocznością mogą zmniejszyć możliwy konflikt kodu! Dlatego po prostu podaj prototyp i definicję funkcji statycznej w pliku .c. Nie dołączaj funkcji statycznej do pliku nagłówkowego; plik .h jest przeznaczony do zewnętrznego użytku.

Duplikat: Static functions in C

Powiązane problemy