C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Definition ist Wertzuweisung?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Klaus Reinke
Guest





PostPosted: Sun Sep 10, 2006 4:27 am    Post subject: Definition ist Wertzuweisung? Reply with 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?:
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





PostPosted: Sun Sep 10, 2006 12:01 pm    Post subject: Re: Definition ist Wertzuweisung? Reply with quote



"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





PostPosted: Sun Sep 10, 2006 12:46 pm    Post subject: Re: Definition ist Wertzuweisung? Reply with quote



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





PostPosted: Sun Sep 10, 2006 12:57 pm    Post subject: Re: Definition ist Wertzuweisung? Reply with quote

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





PostPosted: Sun Sep 10, 2006 3:47 pm    Post subject: Re: Definition ist Wertzuweisung? Reply with quote

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





PostPosted: Sun Sep 10, 2006 4:03 pm    Post subject: Re: Definition ist Wertzuweisung? Reply with quote

"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





PostPosted: Sun Sep 10, 2006 4:23 pm    Post subject: Re: Definition ist Wertzuweisung? Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.