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).

2voto

hdante Punkte 6926

Eine Deklaration präsentiert dem Compiler einen Symbolnamen. Eine Definition ist eine Deklaration, die Platz für das Symbol zuweist.

int f(int x); // function declaration (I know f exists)

int f(int x) { return 2*x; } // declaration and definition

2voto

Könnten Sie nicht ganz allgemein sagen, dass eine Deklaration ein Bezeichner ist, in dem kein Speicherplatz zugewiesen wird, und eine Definition tatsächlich Speicherplatz aus einem deklarierten Bezeichner zuweist?

Ein interessanter Gedanke - eine Vorlage kann keinen Speicherplatz zuweisen, bis die Klasse oder Funktion mit den Typinformationen verknüpft ist. Ist der Vorlagenbezeichner also eine Deklaration oder eine Definition? Es sollte eine Deklaration sein, da kein Speicherplatz zugewiesen wird und Sie lediglich ein "Prototyping" der Vorlagenklasse oder -funktion vornehmen.

1voto

LinuxBabe Punkte 359

Nach dem Handbuch der GNU C-Bibliothek ( http://www.gnu.org/software/libc/manual/html_node/Header-Files.html )

In C enthält eine Deklaration lediglich die Information, dass eine Funktion oder Variable existiert, und gibt ihren Typ an. Bei einer Funktionsdeklaration können auch Informationen über die Typen ihrer Argumente angegeben werden. Der Zweck von Deklarationen ist es, dem Compiler zu ermöglichen, Verweise auf die deklarierten Variablen und Funktionen korrekt zu verarbeiten. Eine Definition hingegen weist einer Variablen Speicherplatz zu oder gibt an, was eine Funktion tut.

1voto

SridharKritha Punkte 6415

Hinzufügen von Definitions- und Deklarationsbeispielen aus dem C++-Standarddokument (aus dem Abschnitt 3.1 Deklarationen und Definitionen)

Definitionen:

int a;                       // defines a
extern const int c = 1;      // defines c
int f(int x) { return x+a; } // defines f and defines x
struct S { int a; int b; };  // defines S, S::a, and S::b
struct X {                   // defines X
    int x;                   // defines non-static data member x
    static int y;            // DECLARES static data member y
    X(): x(0) { }            // defines a constructor of X
};
int X::y = 1;                // defines X::y
enum { up, down };           // defines up and down
namespace N { int d; }       // defines N and N::d
namespace N1 = N;            // defines N1
X anX;                       // defines anX

Erklärungen:

extern int a;                 // declares a
extern const int c;           // declares c
int f(int);                   // declares f
struct S;                     // declares S
typedef int Int;              // declares Int
extern X anotherX;            // declares anotherX
using N::d;                   // declares d

0voto

Jason K. Punkte 397

Mein Lieblingsbeispiel ist "int Num = 5". Hier ist Ihre Variable 1. als int definiert, 2. als Num deklariert und 3. mit dem Wert fünf instanziiert. Wir

  • Definieren Sie den Typ eines Objekts, der eingebaut oder eine Klasse oder Struktur sein kann.
  • Deklarieren Sie den Namen eines Objekts, so dass alles, was einen Namen hat, deklariert wurde, einschließlich Variablen, Funktionen usw.

Eine Klasse oder Struktur ermöglicht es Ihnen zu ändern, wie Objekte definiert werden, wenn sie später verwendet werden. Zum Beispiel

  • Man kann eine heterogene Variable oder ein Array deklarieren, die nicht speziell definiert sind.
  • Mit einem Offset in C++ können Sie ein Objekt definieren, das keinen deklarierten Namen hat.

Wenn wir programmieren lernen, werden diese beiden Begriffe oft verwechselt, weil wir oft beides gleichzeitig tun.

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