Kann sich Code, der sowohl in C als auch in C gültig ist, unterschiedlich verhalten, wenn er in jeder Sprache kompiliert wird?
C und C haben viele Gemeinsamkeiten, aber bestimmten Code Konstrukte können beim Kompilieren in diesen Sprachen unterschiedliche Ergebnisse liefern, selbst wenn der Code in beiden syntaktisch gültig ist.
Funktionsaufrufe vs. Objektdeklarationen
Ein solches Szenario betrifft Funktionen Anrufe. In C90 können Funktionen ohne vorherige Deklaration aufgerufen werden. In C wird jedoch ein Objekt vom Typ f erstellt, wenn f() ohne Deklaration aufgerufen wird.
Beispielcode:
Bedenken Sie den folgenden Code:
#include <stdio.h> struct f { int x; }; int main() { f(); } int f() { return printf("hello"); }
Verhaltensunterschiede:
Überlegungen zur Version:
Dieses Verhalten Der Unterschied ist spezifisch für C90. In späteren Versionen des C-Standards (z. B. C99) ist es nicht mehr zulässig, Funktionen ohne Deklaration aufzurufen. Infolgedessen würde sich der Code in C und C gleich verhalten.
Das obige ist der detaillierte Inhalt vonKönnen sich Funktionsaufrufe in C und C trotz gültigem Code unterschiedlich verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!