Verhaltensunterschiede im gültigen Code zwischen C und C
Während C und C viele Gemeinsamkeiten aufweisen, gibt es einige Fälle, in denen in beiden gültiger Code vorhanden ist Sprachen können unterschiedliche Ergebnisse liefern, wenn sie in der jeweiligen Sprache kompiliert werden.
Funktionsaufruf und Objekt Deklarationen
Ein solches Szenario hängt mit dem Unterschied zwischen Funktionsaufrufen und Objektdeklarationen zusammen. In C90 können Funktionen aufgerufen werden, ohne dass sie vorher deklariert werden müssen. In C sind nicht deklarierte Funktionen jedoch nicht erlaubt. Diese Unterscheidung kann zu unterschiedlichem Verhalten beim Kompilieren des folgenden Codes führen:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
In C gibt dieser Code nichts aus, da ein temporäres Objekt vom Typ f erstellt und zerstört wird, was zum Verlust des x-Mitglieds führt . In C90 wird jedoch „Hallo“ ausgegeben, da Funktionen aufgerufen werden können, ohne dass sie deklariert wurden.
Begriffsklärung von Namen
Ein weiterer zu beachtender Punkt ist die Verwendung von der Name f im Beispielcode. Sowohl C als auch C erlauben die Verwendung desselben Namens für Funktionen und Strukturen. Um ein Objekt in C zu erstellen, muss struct f explizit angegeben werden. Wenn das Schlüsselwort struct weggelassen wird, wird der Code als Funktionsaufruf interpretiert. Diese Unterscheidung trägt zusammen mit den unterschiedlichen Aufrufkonventionen zu dem unterschiedlichen Verhalten bei, das beim Kompilieren des Codes in C und C beobachtet wird.
Das obige ist der detaillierte Inhalt vonWarum gibt derselbe Code in C „Hallo' und in C „Nichts' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!