1059 Stimmen

Was ist der Unterschied zwischen einer Definition und einer Erklärung?

Die Bedeutung von beidem entzieht sich mir.

20 Stimmen

Um ehrlich zu sein, hatte ich große Schwierigkeiten, herauszufinden, wer wer ist, und ich fand die Namen nicht offensichtlich. Ich hatte kein Problem mit den Bedeutungen, sondern nur damit, welche Namen ich mit den Bedeutungen in Verbindung bringen konnte.

2 Stimmen

Wir haben das schon ausführlich besprochen: stackoverflow.com/questions/671925/

7 Stimmen

Dennoch ist es keine doppelte Frage, da diese Frage sich auf C/C++ bezieht, während die andere Frage sich auf alle oder keine Sprachen im Allgemeinen bezieht. Es gibt nur doppelte Antworten (da bei der anderen Frage einige Antworten alle Sprachen außer C und/oder C++ ignorierten).

4voto

Definition bedeutet tatsächliche Funktion geschrieben & Deklaration bedeutet einfache Deklarationsfunktion z.B..

void  myfunction(); //this is simple declaration

und

void myfunction()
{
 some statement;    
}

Dies ist die Definition der Funktion myfunction

4voto

bjhend Punkte 1394

Faustformel:

  • A Erklärung teilt dem Compiler mit, wie die Daten der Variablen im Speicher zu interpretieren sind. Dies ist für jeden Zugriff erforderlich.

  • A Definition reserviert den Speicher, um die Variable existieren zu lassen. Dies muss genau einmal vor dem ersten Zugriff geschehen.

4voto

Santosh Punkte 1224

Ähnliche Antworten finden Sie hier: Technische Interviewfragen in C .

A Erklärung gibt dem Programm einen Namen; ein Definition bietet eine eindeutige Beschreibung einer Entität (z. B. Typ, Instanz und Funktion) innerhalb des Programms. Deklarationen können in einem bestimmten Bereich wiederholt werden, sie führen einen Namen in einem bestimmten Bereich ein.

Eine Erklärung ist eine Definition, es sei denn:

  • Die Deklaration deklariert eine Funktion, ohne ihren Körper zu spezifizieren,
  • Die Deklaration enthält einen externen Spezifizierer und keinen Initialisierer oder Funktionskörper,
  • Deklaration ist die Deklaration eines statischen Klassendatenelements ohne Klassendefinition,
  • Die Deklaration ist eine Definition des Klassennamens,

Eine Definition ist eine Erklärung, es sei denn:

  • Die Definition definiert ein statisches Datenelement der Klasse,
  • Definition definiert eine Nicht-Inline-Mitgliedsfunktion.

3voto

midhun p Punkte 1541

Erklärung sagt: "Dieses Ding existiert irgendwo"

int sampleFunc(); // function
extern int car;  // variable

Definition sagt: "Dieses Ding existiert hier; speichere es ab".

int sampleFunc() {} // function
int car; // variable

Initialisierung ist bei der Definition von Objekten fakultativ und besagt: "Hier ist der Anfangswert für diese Sache":

int car = 0; // variable

3voto

princio Punkte 101

Um den Unterschied zwischen Deklaration und Definition zu verstehen, müssen wir uns den Assemblercode ansehen:

uint8_t   ui8 = 5;  |   movb    $0x5,-0x45(%rbp)
int         i = 5;  |   movl    $0x5,-0x3c(%rbp)
uint32_t ui32 = 5;  |   movl    $0x5,-0x38(%rbp)
uint64_t ui64 = 5;  |   movq    $0x5,-0x10(%rbp)
double   doub = 5;  |   movsd   0x328(%rip),%xmm0        # 0x400a20
                        movsd   %xmm0,-0x8(%rbp)

und das ist nur die Definition:

ui8 = 5;   |   movb    $0x5,-0x45(%rbp)
i = 5;     |   movl    $0x5,-0x3c(%rbp)
ui32 = 5;  |   movl    $0x5,-0x38(%rbp)
ui64 = 5;  |   movq    $0x5,-0x10(%rbp)
doub = 5;  |   movsd   0x328(%rip),%xmm0        # 0x400a20
               movsd   %xmm0,-0x8(%rbp)

Wie Sie sehen können, hat sich nichts geändert.

Die Deklaration unterscheidet sich von der Definition, da sie Informationen enthält, die nur vom Compiler verwendet werden. Zum Beispiel sagt uint8_t dem Compiler, dass er die ASM-Funktion movb verwenden soll.

Siehe das:

uint def;                  |  no instructions
printf("some stuff...");   |  [...] callq   0x400450 <printf@plt>
def=5;                     |  movb    $0x5,-0x45(%rbp)

Die Deklaration hat keine gleichwertige Anweisung, weil sie nicht ausgeführt werden kann.

Außerdem teilt die Deklaration dem Compiler den Geltungsbereich der Variablen mit.

Wir können sagen, dass die Deklaration eine Information ist, die vom Compiler verwendet wird, um die korrekte Verwendung der Variablen festzulegen und um zu bestimmen, wie lange ein bestimmter Speicherplatz zu einer bestimmten Variablen gehört.

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