Le definizioni di funzione nel modulo non prototipo sono codici C89, C99 e C11 validi.
Si chiama definizione della funzione vecchio stile ma questa funzione è contrassegnata dal C89 come funzione obsoleta.
Questo modulo deve essere non utilizzato nei nuovi programmi.
C99 Razionale dice:
"che caratterizza il vecchio stile come obsoleto è destinato a scoraggiare suo uso e per servire come una forte approvazione da parte del Comitato delle nuovo stile".
anche K & R2 scoraggia il suo utilizzo:
"Il vecchio stile di dichiarazione e la definizione funziona ancora con ANSI C, almeno per un periodo di transizione, ma si consiglia vivamente di utilizzare il nuovo modulo quando hai un compilatore che lo supporta. "
Ora anche la funzione non ha un tipo di ritorno e omettendo il tipo di ritorno in una dichiarazione di funzione o in una definizione di funzione non è più valida dal C99. Prima di C99, le funzioni senza un tipo restituito restituivano implicitamente un int
.
Per quanto riguarda la domanda gcc
, per impostazione predefinita gcc
compila con -std=gnu89
. Significa C89 Standard + estensioni gcc. Quindi, per impostazione predefinita, gcc
accetterà di compilare un programma con la dichiarazione e la definizione delle funzioni nel loro formato vecchio stile e senza un tipo di ritorno.
Questa sintassi era vecchia anche nel 1993 :) – dasblinkenlight
Penso che il compilatore in bundle con HP-UX supporti solo questo anche sui sistemi moderni.Il compilatore ANSI C costa denaro aggiuntivo. Quindi se hai bisogno di compilare un programma C molto semplice, conoscere questa sintassi può effettivamente essere utile. –
Nel 1993, non era irragionevole usare quella vecchia sintassi; c'erano ancora macchine in cui i compilatori nativi non supportavano la Standard C. Non molti, ma ce n'erano alcuni. Non è stato fino agli anni '90 (dal 1996 in poi) che i prototipi erano sufficientemente universali da poter essere utilizzati automaticamente. Vicino al confine, ma nel 1993, ancora giustificabile (anche se ci sarebbe dovuto essere un chiarimento da qualche parte nel libro). –