2012-07-30 14 views
5

Rozważmy następujący kod:Jak uczynić gcc ostrzeżeniem o nieznanych funkcjach?

int function() 
{ 
    int a = 1 ; 
    int b = helper(&a); 
    return b ; 
} 

int main() 
{ 
    function(); 
    return 0 ; 
} 

Ten fragment kodu kompiluje kodu wynikowego bez problemu za pomocą gcc, pomimo faktu, że funkcja nazywa się „pomocnikiem” nie została zadeklarowana. Wiem, że linker powinien złapać to, ale widziałem niejasny bugs, który został rozwiązany po uwzględnieniu poprawnych nagłówków (zawierających deklaracje funkcji), mimo że linker i kompilator nie generują żadnych błędów.

Istnieje wiele ostrzeżeń gcc, które wydają się być powiązane, ale tak naprawdę nie osiągają tego, co chcę: - Wrzeszczące - prototypy, - Deklaracje składane i -Wtryskowe prototypy. Niestety te ostrzeżenia są ograniczone do brakujących prototypów, gdy funkcje globalne są zdefiniowane jako zdefiniowane jako. Interesują mnie ostrzeżenia o brakujących prototypach, gdy funkcje globalne są , z odniesieniem.

Czy ktoś może sugerować alternatywy ?, dzięki.

Odpowiedz

11

Chcesz ostrzeżenie -Wimplicit-function-declaration.

Osobiście wolę kompilowanie mojego kodu od -Wall -Wextra.

+0

Tak !, tego właśnie chcę :) –

+1

Włącza go funkcja -Wall (której zawsze powinieneś używać) i kiedy używasz -std = c99. – ext

+0

@ext yep, tak brzmi "man gcc". –

4

Użyj -Wl,--no-undefined, aby uzyskać wymuszony błąd undefined function.

+0

To jest opcja łącznika? –

+0

@GearoidMurphy: Tak. – Jack

Powiązane problemy