 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Klaus Reinke Guest
|
Posted: Sun Sep 10, 2006 4:27 am Post subject: Definition ist Wertzuweisung? |
|
|
So ganz OT ist meine Frage ja nicht gerade aber ohne
Belang ist diese Frage jedenfalls auch nicht.
Was ist von dem Satz: "Definition ist Wertzuweisung" zu halten?
Schwierig, im Rahmen meines cpp-(Anfänger)-Skriptes wird zwischen den
Begriffen: Dekl. Defin. und Initialisierung unterschieden. (Wenn bislang
vielleicht noch unzulänglich)
Was ist eine Definition?:
Ich nehme mir ein Wort und gebe diesem Wort eine bestimmte Bedeutung; dies
wäre eine wissenschaftliche Sicht.
Der EDVler sagt: wenn ich mir die vage Vorstellung einer noch zu
konstruierenden Rechenvorschrift (Formel) vornehme und dem Programm
bekanntmache dann ist dies noch nicht die Def. sondern die Deklaration,
wenn die Funktion für den Compiler verarbeitbar wird, dann habe ich eine
gültige Definition. Also ein möglicher Ausgabewert wird in Abhängigkeit vom
möglichen Eingabewert berechnet.
Bin auf Sichtweisen sehr gespannt!
mfg Klaus
--
www.zuffnick.de/cpp-kurs/ |
|
| Back to top |
|
 |
Heinz Ozwirk Guest
|
Posted: Sun Sep 10, 2006 12:01 pm Post subject: Re: Definition ist Wertzuweisung? |
|
|
"Klaus Reinke" <runke@t-online.de> schrieb im Newsbeitrag
news:edvim3$v63$02$1 (AT) news (DOT) t-online.com...
| Quote: | So ganz OT ist meine Frage ja nicht gerade aber ohne
Belang ist diese Frage jedenfalls auch nicht.
Was ist von dem Satz: "Definition ist Wertzuweisung" zu halten?
|
Bezogen auf C++ ist der Satz falsch, vermutlich eine falsche Übersetzung des
Englischen "definition is initialization".
| Quote: | Schwierig, im Rahmen meines cpp-(Anfänger)-Skriptes wird zwischen den
Begriffen: Dekl. Defin. und Initialisierung unterschieden. (Wenn bislang
vielleicht noch unzulänglich)
|
Die Begriffe werden gerne mal durcheinander geschmissen. In C++ (und C) wird
zwischen Deklaration (declaration) und Definition (definition)
unterschieden. Dabei ist im wesentlichen eine Deklaration die Beschreibung
eines Namen (identifier). Die Deklaration gibt nur an, wie ein Name benutzt
werden soll. Dagegen ist eine Definition die genaue Beschreibung eines Typs,
einer Funktion, eines Objekts oder Templates (ich hoffe, ich habe nichts
vergessen).
Definitionen sind z.B.
int x;
int Inc(int x) { return x + 1; }
typedef int Int;
struct Point { int x; int y; }
Die entsprechenden Deklarationen wäre
extern int x;
int Inc(int);
struct Point;
Es gibt keine Deklaration, die einem typedef entspricht.
Für Variablen gilt die Regel, dass es eine Definition ist, wenn für die
Variable Speicher reserviert wird, und eine Deklaration, wenn nur auf eine
Definition verwiesen wird. Das gilt in geweisser Weise auch für Funktionen,
aber natürlich nicht für Typen.
Etwas anderes, das gerne durcheinander gebracht wird, sind Wertzuweisungen
und Initialisierungen. Eine Initialisierung ist die "Zuweisung" in einer
Definition, also bereits beim reservieren des Speichers, z.B.
int x = 42;
int y(4711);
Dagegen ist eine Wertzuweisung die spätere Zuweisung eines (neuen) Wertes,
z.B.
int x;
...
x = 42;
Der Satz "Definitition is initialization" ist ein Ratschlag für
Programmierer. Er soll dazu auffordern, jede Variable bei ihrer Definition
immer mit einem sinnvollen Wert zu initialisieren.
| Quote: | Was ist eine Definition?:
|
Kommt darauf an, wie "Definition" definiert ist ;-)
| Quote: | Ich nehme mir ein Wort und gebe diesem Wort eine bestimmte Bedeutung; dies
wäre eine wissenschaftliche Sicht.
Der EDVler sagt: wenn ich mir die vage Vorstellung einer noch zu
konstruierenden Rechenvorschrift (Formel) vornehme und dem Programm
bekanntmache dann ist dies noch nicht die Def. sondern die Deklaration,
|
Diese Vorstellung ist ein bisschen zu vage. Wenn du sagst, "Es gibt eine
Funktion sin, die ein double als Parameter erwartet und ein double liefert",
dann ist das eine Deklaration, in C++
double sin(double);
Der Compiler weiß dann, wie er diese Funktion aufrufen muss und was er von
ihr zu erwarten hat. Mehr braucht er nicht zu wissen, um die Funktion zu
benutzen. Genausowenig wie ich wissen muss, was genau passiert, wenn ich
z.B. telefonieren will. Ich weiß nicht, wie genau passiert, wenn ich die
Nummer wähle, den Hörer abhebe usw. Mir reicht es zu wissen, dass ich die
gewünschte Nummer eingeben (Parameter übergeben), den Hörer abheben muss
(Funktionsaufruf) und dann als Ergebnis ein Frei- oder Besetztzeichen zu
hören bekomme (Funktionsrückgabe).
Wenn ich dagegen ein Telefon bauen sollte, dann bräuchte ich wenigestens
einmal einen Schaltplan und natürlich die ganzen Einzelteile, die ich dann
entsprechnd des Plans zusammensetzen müsste. Das wäre dann mit der
Definition der Funktion zu vergleichen.
HTH
Heinz |
|
| Back to top |
|
 |
Tibor Pausz Guest
|
Posted: Sun Sep 10, 2006 12:46 pm Post subject: Re: Definition ist Wertzuweisung? |
|
|
Klaus Reinke wrote:
| Quote: | Was ist von dem Satz: "Definition ist Wertzuweisung" zu halten?
|
Er ist falsch, da man zum Beispiel Klassen definieren kann und dabei
werden keinerlei Werte zugewiesen. |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Sep 10, 2006 12:57 pm Post subject: Re: Definition ist Wertzuweisung? |
|
|
Klaus Reinke <runke@t-online.de> writes:
| Quote: | So ganz OT ist meine Frage ja nicht gerade aber ohne
Belang ist diese Frage jedenfalls auch nicht.
Was ist von dem Satz: "Definition ist Wertzuweisung" zu halten?
Schwierig, im Rahmen meines cpp-(Anfänger)-Skriptes wird zwischen
den Begriffen: Dekl. Defin. und Initialisierung unterschieden. (Wenn
bislang vielleicht noch unzulänglich)
Was ist eine Definition?:
|
Es geht ja hier nicht um einen allgemeinen Begriff "Definition",
sondern darum, wie er in C und C++ verwendet wird. Und wenn
Wertzuweisung ins Spiel kommt, nehme ich an, wir können den Kontext
weiter einengen auf Variablen:
Eine *Variable* ist ein Objekt mit Name.
Die *Deklaration* einer Variablen vereinbart einen Namen für eine
Variable eines bestimmten Typs.
Falls der Typ nicht ein Referenztyp ist:
Die *Definition* einer Variablen ist eine Deklaration, welche Speicher
für die Variable reserviert. Sie kann eine *Initialisierung*
enthalten, d.h. die Festlegung des Werts, welchen die Variablen bei
ihrer Entstehung annehmen soll; wenn der Typ ein const-Typ ist, muss
die Definition eine Initialisierung enthalten.
Eine *Zuweisung* setzt den Wert einer Variablen auf denjenigen eines
Ausdrucks.
Falls der Typ ein Referenztyp ist:
Die *Definition* einer Variablen ist eine Deklaration, welche
zusätzlich festlegt, welches Objekt die Variable
referenziert. D.h. die Definition muss eine *Initialisierung*
enthalten.
*Zuweisung* gibt es bei Referenzvariablen nicht.
In C und C++ ist der Satz "Definition ist Wertzuweisung" also nicht
zutreffend. |
|
| Back to top |
|
 |
Björn Hendriks Guest
|
Posted: Sun Sep 10, 2006 3:47 pm Post subject: Re: Definition ist Wertzuweisung? |
|
|
Klaus Reinke wrote:
| Quote: | Was ist von dem Satz: "Definition ist Wertzuweisung" zu halten?
Schwierig, im Rahmen meines cpp-(Anfänger)-Skriptes wird zwischen den
Begriffen: Dekl. Defin. und Initialisierung unterschieden. (Wenn bislang
vielleicht noch unzulänglich)
Was ist eine Definition?:
|
Wenn du ganz genau wissen willst, was bei C++ unter einer Definition
verstanden wird, solltest du selbst einen Blick in den Standard werfen,
obwohl die bisher gegebenen Antworten es auch gut beschreiben.
Den Standard kannst du zum Beispiel unter
http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882-2003
für $30 bekommen. IMHO sollte er die Grundlage für jedes Skript über C++
sein oder anders gesagt, C++-Skripte sollten allenfalls Vereinfachungen des
Standards sein, aber die im Standard festgelegten Begriffe nicht anders
benutzen.
Gruß
Björn |
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Sun Sep 10, 2006 4:03 pm Post subject: Re: Definition ist Wertzuweisung? |
|
|
"Heinz Ozwirk" <hozwirk (AT) arcor (DOT) de> writes:
| Quote: | Es gibt keine Deklaration, die einem typedef entspricht.
|
Das verstehe ich nicht. Jedes typedef ist eine Deklaration. |
|
| Back to top |
|
 |
Stefan Ram Guest
|
Posted: Sun Sep 10, 2006 4:23 pm Post subject: Re: Definition ist Wertzuweisung? |
|
|
Klaus Reinke <runke@t-online.de> writes:
| Quote: | Was ist von dem Satz: "Definition ist Wertzuweisung" zu halten?
|
Das klingt sprachlich schlecht. Ich nehme an, gemeint ist
"Eine Definition ist eine Wertzuweisung."
Das ist im Rahmen der Terminologie der Norm ISO/IEC
14882:2003(E), die C++ definiert, nicht nachvollziehbar.
Entweder es ergibt keinen Sinn (Warum soll eine
Funktionsdefinition eine Wertzuweisung sein?) oder es ist
falsch.
Außerdem frage ich mich, warum von einer "Wertzuweisung"
gesprochen wird. Was soll denn sonst zugewiesen werden, wenn
kein Wert?
Der Fachbegriff "Definition" wird in Bezug auf das
Quelltextmodell der Programmiersprache C++ im Abschnitt 3.1
dieser Norm so festgelegt:
»A declaration is a definition unless it declares a
function without specifying the function's body (8.4), it
contains the extern specifier (7.1.1) or a
linkage-specification 24) (7.5) and neither an initializer
nor a function-body, it declares a static data member in a
class declaration (9.4), it is a class name declaration
(9.1), or it is a typedef declaration (7.1.3), a
using-declaration (7.3.3), or a using-directive (7.3.4).« |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|