Warum sind Funktionsdeklarationen in C++ obligatorisch und nicht in C?

Lesezeit: 3 Minuten

Eine meiner vorherigen Prüfungen hatte also diese Frage, und bis jetzt habe ich gelesen, dass Sie in keiner der Sprachen eine Erklärung benötigen?

Was ist richtig? Gibt C++ einen Fehler aus, wenn es keine Deklaration gibt, oder wird es ausgeführt?

  • stackoverflow.com/questions/645778/…

    – Helfermethode

    3. Mai 2011 um 23:28 Uhr

  • Die Frage ist, warum sollte er brauchen Antworten, da er es bereits weiß Die antworten?

    – Alexander Geßler

    3. Mai 2011 um 23:35 Uhr


  • @ Alexander Ahh … paradox. Darauf könnte Jon Skeet antworten.

    – zengr

    4. Mai 2011 um 0:14 Uhr

  • @Alexander: Um sicher zu sein. Zu viele widersprüchliche Antworten waren vorher aufgetaucht.

    – Achint

    4. Mai 2011 um 19:59 Uhr

  • @Acint – verzeih mir, ich habe auf die Tatsache gestoßen, dass 42 eine ganz besondere Bedeutung hat, wenn es darum geht, etwas zu beantworten. Ich meinte nicht, dass die Frage nicht in Ordnung war.

    – Alexander Geßler

    4. Mai 2011 um 20:01 Uhr


AnT steht mit Russlands Benutzer-Avatar
AnT steht zu Russland

In einer Diskussion, die sowohl C als auch C++ betrifft, ist “Funktionsdeklaration” ein ziemlich vager Begriff. Diese Sprachen unterscheiden sich in dieser Hinsicht erheblich.

In der Sprache C++ gibt es nur eine Art von Funktionsdeklaration: Deklaration mit allen Parametertypen und Rückgabetyp. Solche Deklarationen sind notwendig, da die C++-Sprache Funktionen unterstützt Überlastung. Um auszuwählen, welche Funktion aufgerufen werden soll, muss der Compiler alles über die Funktion wissen und wissen, welche überladenen Versionen der Funktion verfügbar sind. Wenn Sie “vergessen”, eine überladene Version zu deklarieren, wird sie von der Überladungsauflösung nicht berücksichtigt. Das ist zumindest einer der Gründe, warum Funktionsdeklarationen in C++ notwendig sind.

In der C-Sprache gibt es zwei Arten von Funktionsdeklarationen: kein Prototyp Erklärungen u Prototyp Erklärungen (oder einfach Prototypen). Ein Prototyp in C ist der C++-Deklaration ziemlich ähnlich – er enthält alle Parametertypen. Prototypen wurden in Standard-C schon immer für verschiedene Funktionen benötigt (Funktionen mit ... Parameter). Für nicht-variadische Funktionen Prototyp Deklarationen sind auch heute noch nicht erforderlich. Aber zumindest ab C99 kein Prototyp Für alle anderen Funktionen sind Deklarationen erforderlich. In älteren C89/90-Versionen der Sprache waren Funktionsdeklarationen für nicht-variadische Funktionen nicht erforderlich.

Damit sollte deine Frage im Grunde beantwortet sein. In C++ sind Funktionsdeklarationen erforderlich, da Sprachfeatures auf sie angewiesen sind. In modernem C werden auch Funktionsdeklarationen benötigt, um den Code sicherer zu machen. In älteren Versionen von C waren Funktionsdeklarationen meistens einfach nicht erforderlich, weil die Sprache so definiert wurde, dass sie ohne sie funktioniert.

Justins Benutzer-Avatar
Justin

Funktionsdeklarationen in C sind aus Legacy-/Abwärtskompatibilitätsgründen nicht obligatorisch – wenn sie obligatorisch gemacht würden, würde irgendein alter/Legacy-Code irgendwo die Kompilierung stoppen.

Ich würde vermuten, dass sie in C++ obligatorisch sind, da C++ keine strikte Obermenge von C ist und daher die vernünftige Entscheidung treffen kann, sie obligatorisch zu machen.

Sie sollten sie jedoch immer deklarieren – siehe diese Frage Muss Funktionsprototyp in C deklariert werden?

FYI in C99-Funktionsdeklarationen Sind jetzt Pflicht.

Funktionsdeklarationen sind in C obligatorisch. Prototypen sind jedoch optional, außer in Fällen von variadischen Funktionen und Funktionen, deren Argumenttypen durch Standard-Promotions geändert würden.

Für C kann ich nicht antworten.

In C++ für Funktionen:

  • void foo(); ist eine Deklaration.
  • void foo() { .. } ist eine Definition Und eine Deklaration.

Sie benötigen mindestens eine Geltungsbereichserklärung, bevor Sie anrufen foo().

Ähnliches gilt für Datenvariablen.

1443690cookie-checkWarum sind Funktionsdeklarationen in C++ obligatorisch und nicht in C?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy