Heim > Backend-Entwicklung > C++ > Können sich Funktionsaufrufe in C und C trotz gültigem Code unterschiedlich verhalten?

Können sich Funktionsaufrufe in C und C trotz gültigem Code unterschiedlich verhalten?

Susan Sarandon
Freigeben: 2024-11-08 14:27:02
Original
750 Leute haben es durchsucht

Can Function Calls Behave Differently in C and C   Despite Valid Code?

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");
}
Nach dem Login kopieren

Verhaltensunterschiede:

  • C90: In C90 wird der Code erfolgreich kompiliert und ruft die Funktion f() auf, was nicht der Fall war deklariert, kann aber aufgerufen werden. Es gibt „Hallo“ aus.
  • C : In C wird der Code kompiliert, gibt aber kein „Hallo“ aus. Stattdessen wird ein temporäres Objekt vom Typ f erstellt. Sobald der f()-Aufruf beendet ist, wird das Objekt zerstört, sodass „Hallo“ nicht gedruckt wird.

Ü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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage