PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Namen mit typedef überschreiben?


Gast
2007-10-01, 10:59:41
Hallo

Darf man eigentlich sowas machen:

typedef struct Test_t
{
int i;
} Test_t;
Man definiert den Namen des Structs also wieder als Typ? Compilieren tut das - wenn ich einfach nur schreibe:

typedef struct
{
int i;
} Test_t;
Zeigt mir VS nämlich keinen Namen dafür an bzw. ignoriert das typdef in der IDE. Gibt es einen Grund warum man das nicht machen sollte?

danke

Neomi
2007-10-01, 12:01:03
Warum so umständlich, wenn es auch einfach geht?

struct Test_t
{
int i;
};

Gast
2007-10-01, 12:27:11
Danke :redface

Irgendwie war ich immer der Ansicht, daß ich dann auch z.B. struct Test_t i; statt einfach Test_t i; schreiben müßte - beim Anlegen, in Funktionsköpfen, etc.

Kann das sein, daß dies in C so war?

Matrix316
2007-10-01, 12:44:36
Hm, afaik ist das auch unter c++ noch so.

Normal sollte aber das funktionieren:


typedef struct
{
int i;
} Test_t;


und du dann später nur

Test_t i;

schreiben musst.

Vielleicht ist aber auch die Typedef Anweisung nicht global angelegt.

malte.c
2007-10-01, 12:51:14
In C++ ist es definitiv möglich, via "struct Foo { ... }" definierte Klassen über "void Bar(Foo foo)" zu verwenden. Typedef ist in diesem Zusammenhang unnötig und sollte nur verwendet werden, wenn derselbe Header auch in C verwendet wird ("extern "C" { ... }").

patermatrix
2007-10-01, 13:50:18
In C++ ist es definitiv möglich
Wird aber AFAIK von einigen (älteren) C/C++ Compilern nur in der C-Version akzeptiert. Habe ich selber noch nicht erlebt, wurde uns damals aber in der Vorlesung erzählt.

Coda
2007-10-01, 14:02:28
Hm, afaik ist das auch unter c++ noch so.

Nein ist es nicht. Das ist einer der Unterschiede der zwei Sprachen. In C ist "struct Foo" der Typ, in C++ aber auch "Foo" wenn man "struct Foo { ... };" deklariert:
http://www.glenmccl.com/bett_008.htm

Ich würde heute einfach C++ als besseres C benützen wenn ich wirklich prozedural programmieren muss. Das hat viele Vorteile.

Matrix316
2007-10-01, 15:54:01
Ok, dann nehme ich das zurück und behaupte das Gegenteil. ;)

Wobei man in C++ dann auch gleich class Foo {} schreiben könnte. ;)

Coda
2007-10-01, 17:56:12
Nein. Man könnte "class { public: ... };" schreiben. Aber für reine Daten benützt man auch in C++ normalerweise struct.