PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kleines Problem mti Deklaration und Definition


pippo
2006-03-23, 14:34:28
Ich hab grad ne alte Prüfung vor mir und obwohl ich ungefähr weiß, was ne Deklaration und was ne Definition ist, häng ich etwas. Bei folgenden Beispielen soll ich sagen, ob es sich um ne Deklaration, Defintion oder beides handelt:
struct imp {float re; float im;} z0; //1
char z; //2
int big (int, int); //3
int big (int x, int y){ if (x>y) return x; return y;} //4
const double EULER = 2.718281828; //5
enum kaffee { schwarz, aulait, cappucino, espresso}; //6

Meine Lösungsvorschläge:
1. beides
2. beides
3. deklaration
4. beides
5. beides
6. definition


Aber irgendwie kommt mir da zuviel "beides" vor :)

UliBär
2006-03-23, 14:52:22
Sehe ich genauso. Ist halt oft beides ;)

Nur bei //4 und //6 besteht eventuell Diskussionsbedarf:
Wenn //1 - //6 nacheinander im selben Text stehen, ist //4 nur eine Definition, da die Funktion in //3 schon deklariert ist.
//6 definiert keine Variable

1) beides
2) beides
3) deklaration
4) definition
5) beides
6) deklaration

pippo
2006-03-23, 15:42:19
Ich hab aber folgendes gefunden:

Eine Deklaration einer Klasse (struct, class, enum, union) Funktion oder Methode wird zu einer Definition, wenn auf die Deklaration ein in geschweiften Klammern eingeschlossener Block folgt.

UliBär
2006-03-23, 17:19:12
Du wolltest eine Antwort, also habe ich geantwortet.
Wenn Du was anderes besser findest, nimm das! ;D

http://de.wikipedia.org/wiki/Deklaration_(Programmierung)
Häufig werden die Begriffe Deklaration und Definition gleichgesetzt. Die Definition ist allerdings ein Sonderfall der Deklaration. Bei Variablen spricht man von Definition, wenn der Compiler Code erzeugt, der entweder statisch (im Datensegment) oder dynamisch (zur Laufzeit) Speicherplatz für diese Variable reserviert. Bei Unterprogrammen spricht man von Definition, wenn an dieser Stelle der Quelltext des Unterprogramms angegeben ist, der vom Compiler übersetzt wird. Die Deklaration eines Unterprogramms ohne Definition wird auch oft als Prototyp bezeichnet. ...was er bei //6 sicherlich nicht macht :|

zeckensack
2006-03-23, 23:52:05
Ich hab aber folgendes gefunden:Eine Deklaration einer Klasse (struct, class, enum, union) Funktion oder Methode wird zu einer Definition, wenn auf die Deklaration ein in geschweiften Klammern eingeschlossener Block folgt.Mit Verlaub, das ist eine völlig bescheuerte und falsche Definition (no pun intended). Aber, und das meine ich sehr ernst, wenn es das ist was das für dich zuständige Lehrpersonals hören/lesen möchte, dann lerne es eben so.

Wenn du darüber nie mehr geprüft wirst, dann vergiss es einfach ganz schnell wieder. Ganz sicher keine Definition ist zB das:class
Lehrmeinung
{
public:
Lehrmeinung(); //kann aus dem Vakuum entstehen
Lehrmeinung(const Fakten& f); //kann auch auf Tatsachen basieren
Lehrmeinung(const Lehrmeinung& rhs); //... aber am liebsten auf sich selbst
private:
~Lehrmeinung(); //man kann sie ignorieren, aber nie beheben

public:
void veralten();
private:
Fakten f;
Bequemlichkeit bq;
Abgehobenheit ah;
};

zeckensack
2006-03-23, 23:56:09
...was er bei //6 sicherlich nicht macht :|#6 definiert die Enumeration. Es wird keine Variable dieses dieses Typs definiert (nicht mal deklariert), aber das macht auch nichts. Denn da haben wir's doch schon: es wird keine Variable deklariert. Also was ist Zeile 6? Nichtmal eine Deklaration? Ein Kommentar? Whitespace? Nichts?

Eine Deklaration einer enum lautet zB so:enum yay;Und #6 ist weit mehr als das.

UliBär
2006-03-24, 00:38:22
Do as you like :P

pippo
2006-03-24, 09:52:30
Mit Verlaub, das ist eine völlig bescheuerte und falsche Definition (no pun intended). Aber, und das meine ich sehr ernst, wenn es das ist was das für dich zuständige Lehrpersonals hören/lesen möchte, dann lerne es eben so.
Ehrlich gesagt hat das ein Moderator vom C++ Forum im FAQ (http://www.c-plusplus.de/forum/viewtopic-var-t-is-61231.html) gepostet.
Was wäre dann deiner Meinung nach die richtige Antwort auf #6, wenn es weit mehr als eine Deklaration ist?