2 Stimmen

Ist es tragbar, die Funktion nach dem Aufrufen in Hauptfunktion in C zu definieren und deklarieren?

Ich stieß auf den folgenden Unterschied in Bezug auf Funktionsdefinition/Deklaration zwischen C und C++.

In C++ erhalte ich eine Fehlermeldung "Funktionsname ist ungültiges Kennzeichen", wenn ich eine Funktion aufrufe, bevor ich sie deklariere und definiere, was für mich in Ordnung ist, da es vernünftig klingt.

In C mit Visual Studio Compiler erhalte ich die Fehlermeldung, als ich das folgende Programm kompilierte:

Fehler C2371: 'fun': Redefinition; unterschiedliche Grundtypen

Und in gcc-4.3.4 wurde es erfolgreich mit nur dieser Warnung ausgeführt:

Warnung: widersprüchliche Typen für 'fun'

Hier geht es zum Programm:

#include 
int main(){
    fun();
    return 0;
}
void fun(){
    printf("Es macht Spaß");
}

Ist es also in C in Ordnung, einfach eine Funktion aufzurufen und sich später um die Definition zu kümmern?! Und warum verhalten sich die Compiler unterschiedlich?

0voto

Baltasarq Punkte 11596

Das Problem ist, dass die Deklaration von fun() und ihre Implementierung sich in ihrem Rückgabetyp unterscheiden:

fun()   /* int Rückgabetyp angenommen */

/* ... */

void fun() { /* ... */ }   /* void "Rückgabetyp" */

In der Standard-C++ ISO 98 wurde jedoch festgestellt, dass der Compiler nicht mehr davon ausgehen sollte, dass int für fehlende Typen verwendet wird (nicht sicher bei C'99, während du deine Frage für C UND C++ postest).

Schließlich ist es möglich, eine Funktion innerhalb von main() zu deklarieren, dies ist jedoch keine gute Praxis, es sei denn, die Funktion fun() sollte dem Rest des Programms nicht bekannt sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X