variable festlegen struct anders als int?
-
struct { int i } var1; // var1 ist Instanz einer unbenannten struct struct s1 { int i } var2; // var2 ist vom Typ s1 struct s1 var3; // var3 auch, die erneute Definition von s1 kann man sich aber sparenSo gesehen hat das schon eine gewisse Konsistenz.
-
Das erklärt aber nicht, warum das struct da hin muss oder was der Sinn dahinter ist.
-
"Syntaktische Symmetrie von Deklaration und Anwendung"
-
Zeus schrieb:
"Syntaktische Symmetrie von Deklaration und Anwendung"
Ist das so, oder ist das nur eine Vermutung?
Kann mir das eben nur sehr schwer vorstellen bei dem Tippscheuheit, die man sonst ja so kennt.
-
ipsec schrieb:
struct { int i } var1; // var1 ist Instanz einer unbenannten structWozu ist sowas gut bzw. unter welchen Umständen verwendet man sowas?
-
für nen singleton evtl.?
-
drakon schrieb:
Zeus schrieb:
"Syntaktische Symmetrie von Deklaration und Anwendung"
Ist das so, oder ist das nur eine Vermutung?
Kann mir das eben nur sehr schwer vorstellen bei dem Tippscheuheit, die man sonst ja so kennt.Wenn ich so weiter denke, kommen dir noch ein Grund hoch, warum das so ist, also eher eine Vermutung.
-
Zeus schrieb:
Wenn ich so weiter denke, kommen dir noch ein Grund hoch, warum das so ist, also eher eine Vermutung.
Kannst du den Satz nochmal schreiben? Ich verstehe so nicht, was du mir sagen willst.
-
Ops, nun da ich nicht wirklich bei der Entwicklung von ANSI C beteiligt war, kann ich nicht mit Sicherheit sagen, welche Ideen verfolgt würden, also ist es eine Vermutung.
-
Zeus schrieb:
Ops, nun da ich nicht wirklich bei der Entwicklung von ANSI C beteiligt war, kann ich nicht mit Sicherheit sagen, welche Ideen verfolgt würden, also ist es eine Vermutung.
Hätte ja sein können, dass hier jemand ein Buch gelesen hat von Leuten, die an dem Standard mitgearbeitet haben, daher habe ich gefragt.
Mir fällt es aber auch wirklich schwer zu glauben, dass das aus reinen Konsistenzgürnden so ist. Nur damit man es hinschreibt, damits dasteht scheint mir unter keinen Umständen eine wirklich gute Entscheidung zu sein.
-
pmgzed schrieb:
wobei es doch noch interessant wäre warum man das bei c angeben muss

Weil der Name des struct in C einen eigenen Namensraum hat. Man kann z.B. folgendes machen:
struct foo { int x; }; void foo(); ... foo(); // ruft die Funktion auf struct foo bar; // VariablendefinitionDas geht auch in C++ aus Kompatibilitätsgründen, eine Funktion oder eine Variable kann einen Klassennamen gleichen Namens überdecken (in diesem Falle braucht man dann auch in C++ das Klassenschlüsselwort um auf den Typnamen zugreifen zu können).
Aus dem gleichen Grunde ist es in C++ (nicht C) erlaubt, ein typedef auf sich selbst zu deklarien:struct foo; typedef foo foo;Das ist nötig, damit die häufige C-Form
typedef struct foo { int x; } foo;auch in C++ möglich ist.
-
Dweb schrieb:
ipsec schrieb:
struct { int i } var1; // var1 ist Instanz einer unbenannten structWozu ist sowas gut bzw. unter welchen Umständen verwendet man sowas?
Wenn man nur dieses eine Objekt des Typen braucht. Grade in C++ kann man das im Zusammenhang mit Funktoren hin und wieder gebracuhen, wenn man einen speziellen Funktor nur an einer Stelle braucht. In C++0x gibts dafür Lambdas, um solche Funktoren "on the fly" zusammenzubasteln, in C++03 macht man das als lokale Klasse direkt vor der Anwendung.
-
camper schrieb:
pmgzed schrieb:
wobei es doch noch interessant wäre warum man das bei c angeben muss

Weil der Name des struct in C einen eigenen Namensraum hat. Man kann z.B. folgendes machen:
struct foo { int x; }; void foo(); ... foo(); // ruft die Funktion auf struct foo bar; // VariablendefinitionDas geht auch in C++ aus Kompatibilitätsgründen, eine Funktion oder eine Variable kann einen Klassennamen gleichen Namens überdecken (in diesem Falle braucht man dann auch in C++ das Klassenschlüsselwort um auf den Typnamen zugreifen zu können).
Aus dem gleichen Grunde ist es in C++ (nicht C) erlaubt, ein typedef auf sich selbst zu deklarien:struct foo; typedef foo foo;Das ist nötig, damit die häufige C-Form
typedef struct foo { int x; } foo;auch in C++ möglich ist.
sorry das ich mich erst jetzt wieder melde ^^
also das klingt für mich nach einem nachvollziehbaren grund
wobei ich festgestellt habe das es bei c++ mit codeblocks und gcc auch angegeben werden musste
dann noch ein dankeschön an alle die hier so fleißig geantwortet haben