Soweit ich das aus den folgenden Informationen entnehmen kann Das C-Buch 4.2 Ihre Funktionsdefinition ist kein Prototyp, da sie keine Typinformationen für die Argumente angibt. Das heißt, der Compiler merkt sich nur den Rückgabetyp und behält keinerlei Informationen über die Argumente.
Diese Form der Definition ist aus Gründen der Abwärtskompatibilität immer noch erlaubt und ist nicht auf Funktionen beschränkt, die keine Argumente annehmen. gcc erlaubt auch etwas wie
void hello( a ) {
}
int main( int argc, char* argv[] ) {
int test = 1234;
hello(test,1);
return 0;
}
Wichtig ist hier nur das Fehlen von Typinformationen für die Argumente. Um dies zu beheben und sicherzustellen, dass gcc die Argumente überprüft, wenn die Funktion verwendet wird, können Sie die Typinformationen entweder in eine Deklaration Ihrer Funktion oder in die Definition aufnehmen. Vorzugsweise sollten Sie sie in beide aufnehmen.
All das beantwortet natürlich immer noch nicht wirklich Ihre Frage, warum gcc Sie nicht warnt. Es muss der Fall sein, dass das gcc-Team der Meinung ist, dass es immer noch genügend C-Code im alten Stil gibt, der es rechtfertigt, die Warnung standardmäßig zu unterdrücken. IMO bin ich überrascht, dass die -Wstrict-prototype
ist, wie von @caf erwähnt, nicht standardmäßig aktiviert.