Die Bedeutung von beidem entzieht sich mir.
Antworten
Zu viele Anzeigen?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.
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.
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
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.
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).
7 Stimmen
@DavidThornley Ich verwende diesen Trick: a Definition gibt eine feinere Beschreibung einer bestimmten Variablen oder Funktion. Um mich daran zu erinnern, erinnere ich daran, dass die Mitte des Wortes "Definition" eine Ähnlichkeit mit dem Wort "feiner" hat :)
2 Stimmen
@MarcoLeogrande: Oder "definitiv"!
1 Stimmen
Eine viel interessantere Frage ist die nach dem Unterschied zwischen einer Erklärung und einem Prototyp ": stackoverflow.com/questions/5481579/
1 Stimmen
Hier ist ein schöner Artikel, der erklärt, wie das externe Schlüsselwort und die Speicherzuweisung mit Deklarationen / Definitionen zusammenhängt: dreamincode.net/forums/topic/171468-erklärungen-vs-definitionen
1 Stimmen
Das kann helfen cprogramming.com/declare_vs_define.html
0 Stimmen
Wenn Sie Schwierigkeiten haben, sich die Begriffe zu merken, beachten Sie bitte, dass die Begriffe in alphabetischer Reihenfolge stehen - Erklärung, Definition, Verweis. Das ist im Allgemeinen die Reihenfolge, in der sie erscheinen sollten.
0 Stimmen
Mögliches Duplikat von Was genau sind C++-Definitionen, Deklarationen und Zuweisungen?