2009-03-23 7 views

Antwort

9

Definieren und erklären sind ähnlich, aber zuweisen ist sehr unterschiedlich.

Hier bin ich zu erklären (oder die Definition) eine Variable:

int x; 

Hier habe ich Wert auf diese Variable am zuweisen:

x = 0; 

Hier habe ich beide in einer Erklärung tue:

Hinweis

Nicht alle Sprachen unterstützen Deklaration und Zuweisung in einer Erklärung:

T-SQL

declare x int; 
set x = 0; 

Einige Sprachen erfordern, dass Sie einen Wert in eine Variable bei der Deklaration zuweisen. Diese Anforderung kann der Compiler oder Interpreter der Sprache einen Typ für die Variable folgern:

Python

x = 0 
+0

Ich werde ein Haar teilen - Python hat keine "Erklärung" irgendeiner Art. Klassen und Funktionen sind "definiert", Variablen werden bei der Zuweisung angelegt. Sie deklarieren Variablen nicht wirklich, da sie nur Namen sind, die Objekten zugewiesen sind. –

+0

Das ist ein guter Punkt - von einem Pedanten zum anderen schätze ich die Unterscheidung :) –

+0

Mehr Nitpicking: Python führt keine Art Inferenz, es ist dynamisch typisiert. Typinferenz ist nur erforderlich, wenn die Variable einen Typ hat.Dies ist ein gültiges Python und veranschaulicht die Auswirkungen meines Punktes: 'x = 5; x = "str" ​​' –

4

Diese Begriffe haben oft präzise Bedeutungen in den Normen für verschiedene Sprachen. Wenn dies der Fall ist, sollten sie nicht zusammengeführt werden.

In c zum Beispiel:

  • eine Funktion definiert werden darf nur einmal (wenn Sie sagen, was es tut), aber es kann auch erklärt vor, dass sein (wenn Sie sagen, welche Argumente es dauert und welchen Typ gibt es zurück).

  • ebenfalls eine Variable ist deklariert wenn Sie sagen, welcher Typ es ist, und dies geschieht nur einmal für jeden Bereich. Aber Sie können immer wieder einen Wert zuweisen. (Einige Sprachen auch zwischen Initialisierung (was eine Variable einen Wert bei der Deklaration) und Zuordnung (Änderung des Wertes unterscheiden später).)

5

Es ist wichtig, die richtige Terminologie zu verwenden, sonst werden die Menschen nicht wissen, wovon du sprichst, oder fälschlicherweise annehmen, dass du nicht weißt, wovon du sprichst.

32

Eine Definition ist, wo ein Wert oder eine Funktion beschrieben wird, d.h. dem Compiler oder Programmierer wird genau gesagt, was es ist, z.B.

int foo() 
{ 
    return 1; 
} 

int var; // or, e.g. int var = 5; but this is clearer. 

Eine Deklaration teilt dem Compiler oder Programmierer mit, dass die Funktion oder Variable existiert. z.B.

int foo(); 
extern int var; 

Eine Zuweisung ist, wenn eine Variable ihren Wert gesetzt hat, normalerweise mit dem Operator =. z.B.

+0

+1 das ist im Grunde, was ich schreiben wollte ... –

+2

Eigentlich würde ich "int var;" Definition sein, "int var = 5;" ist ein kombinierter Def/Ass. Im Grunde genommen ist Definition in C alles, was Platz für ein Objekt schafft. Ich werde trotzdem upvoten, vielleicht ändern Sie die Antwort, vielleicht nicht, aber es ist das Beste, um zu datieren. – paxdiablo

+0

Danke für den Tipp, ich habe die Antwort entsprechend aktualisiert. – jheriko

2

Die Unterschiede können subtil erscheinen, aber sie sind wichtig. Nicht macht jede Sprache die gleichen Unterschiede, aber in C++ eine Variablendeklaration den Typ und die Namen der Variablen ermöglicht dem Compiler bekannt

int i; 

A Variablendefinition ordnet Speicher und gibt einen Anfangswert für die Variable .

i = 1; 

Sie können eine Variable Deklaration und Definition in einer Anweisung kombinieren, wie es üblicherweise getan wird.

int x = 1; 

eine Variable in einer Funktion Deklarieren auch Speicher für die Variable beiseite legen, so dass der folgende Code definiert implizit variable a als Teil seiner Erklärung.

int main() 
{ 
    int a; 
    return 0; 
} 

Da variable a automatisch durch den Compiler definiert ist, wird er Wert enthalten, was auch immer in dem Speicher Lage war, die für es reserviert wurde. Aus diesem Grund ist es nicht sicher, automatische Variablen zu verwenden, bis Sie ihnen explizit einen bekannten Wert zugewiesen haben. Eine Zuweisung findet immer dann statt, wenn Sie den Wert einer Variablen in Ihrem Programm ändern.

x = 2; 
x++; 
x += 4; 

A Funktionsdeklaration, ähnlich der Variablendeklaration, macht die Funktion Signatur zu dem Compiler bekannt. Dadurch können Sie eine Funktion in Ihrem Quellcode aufrufen, bevor sie definiert wird, ohne einen Compilerfehler zu verursachen.

int doSomething(float x); 

A Funktionsdefinition gibt den Rückgabetyp, Name, Parameterliste, und Anweisungen für eine Funktion. Die ersten drei dieser Elemente müssen mit der Funktionsdeklaration übereinstimmen. Eine Funktion muss nur einmal in einem bestimmten Programm definiert werden.

int doSomething(float x) 
{ 
    if(x < 0) 
    { 
     x = -x; 
    } 
    return static_cast<int>(x); 
} 

können Sie kombinieren die Funktion decalartion und Definition in ein, aber Sie müssen dies tun, bevor die Funktion überall in Ihrem Programm aufgerufen wird.

+0

Ich dachte eine Variable * Deklaration * zugewiesenen Speicherplatz. Sie erhalten nur Müll in diesem Bereich, es sei denn, Sie geben auch eine Initialisierung an, oder bis Sie einen neuen Wert zuweisen. Sie können eine Variable nur initialisieren, während Sie sie deklarieren. – Artelius

+0

@Artelius: In den meisten Fällen enthält die Deklaration eine implizite Definition durch den Compiler, die den Eindruck erweckt, dass die Deklaration Speicherplatz zuweist. Ich machte eine (hoffentlich) klärende Ergänzung, um dies in meine Antwort aufzunehmen. Danke, dass du es aufgezeigt hast. –

+0

Ich habe diese Antwort gewählt, da sie korrekt ist, wie ich es gelernt habe. Wenn nicht, würde ich gerne wissen warum. Die obigen Antworten haben die Deklaration und Definition rückwärts. – lakeweb

-1

Die richtige Antwort hängt davon ab, von welcher Sprache Sie sprechen. Computersprachen haben häufig eine spezifische Terminologie, entweder aufgrund der Sprachspezifikation oder der Gemeinschaft, die um die Sprache herum aufgewachsen ist. COBOL, damals, als ich es benutzte, hatte eine viel andere Terminologie als mehr Mainstream-Sprachen (im Sinne von Sprachen, die dem Mainstream der Sprachentwicklung näher standen, nicht Mainstream-Geschäft). Forth entwickelte eine seltsame Terminologie.

Wenn Sie Englisch sprechen, können Sie normalerweise eine gute Idee bekommen, was ein Wort von seiner normalen Bedeutung bedeutet, aber zählen Sie nie zu viel darauf. Dasselbe gilt für bestimmte Wörter in verschiedenen Sprachen oder Sprachgemeinschaften.

-1

Es könnte wie erwähnt von der Sprache abhängen. Ich denke, es hängt wirklich davon ab, ob die Wörter für Dinge wie Klassen verwendet werden. Für die meisten der hier besprochenen Datentypen ist die Frage möglicherweise nicht relevant. In C++ (siehe c++ - What is the difference between a definition and a declaration?) hat eine Klasse oder Struktur immer genau eine Definition, kann aber null oder mehr deklariert werden. Eine Klasse kann nicht ohne Definition deklariert werden. Also "deklariert" könnte auch gleichbedeutend mit "gebraucht" sein.

In den meisten Sprachen benötigen einfache Typen wie Ganzzahlen keine Definitionen in der Art, wie Klassen dies tun.

0

Definition, Deklaration und Zuweisung haben zwei Fälle:

  1. für Variablen.
  2. für Funktionen.

Für Variable:

- Definition:
Um teilt dem Compiler Speicher für Variable zu reservieren.

int x; 

- Verzögerung:
Um teilt dem Compiler mit, dass die Variable in irgendwo anders definiert.

extern int x; 

- Aufgabe:
Um teilt den Compiler den Wert in den Variablen zu setzen.

x = 0; 

Für Funktionen:

- Definition:

int functionDef(int x){ 
     int x; 
     ... 
     ... 
     ... 
     return x; 
    } 

- Verzögerung:
Es ist nur der Prototyp der Funktion.

int functionDef(int x);