
Code: Alles auswählen
typedef struct
{
int x;
} Test;
Test t[] =
{
[0].x = 0,
[5].x = 2
};
int y[] =
{
[1] = 1,
[2] = 2
};
struct
{
int member1;
char member2;
} blub =
{
.member1 = 1234,
.member2 = 'h'
};
Code: Alles auswählen
typedef struct
{
int x;
} Test;
Test t[] =
{
[0].x = 0,
[5].x = 2
};
int y[] =
{
[1] = 1,
[2] = 2
};
struct
{
int member1;
char member2;
} blub =
{
.member1 = 1234,
.member2 = 'h'
};
Das habe ich auch noch nicht gesehen. Und es gefällt mir. => Wiki? ^^Kerli hat geschrieben:Heute bin ich einmal auf eine interessante Möglichkeit von C99 gestoßen, die mir bis jetzt noch überhaupt nicht bekannt war. Es ist zwar nur der bekannt Syntacitc Sugar, es erlaubt aber leserlicheren und besser wartbareren Code zu erzeugen, vor allem beim Initialisieren von Strukturen. Wer glaubt der folgende Code ist nicht C, sollte einmal einen C-Compiler anwerfen und es selbst ausprobieren![]()
C und C++ werden unabhängig voneinander standardisiert, es sind zwei verschiedene Sprachen.Kerli hat geschrieben:Dieses Feature nennt sich im Standard übrigens designator, oder zu Deutsch "Bezeichner". In C++ ist das wohl verloren gegangen; Dafür gibt es dort Konstruktoren...
Mir gefällt's! Hat jemand mal einen Vergleich gemacht, was schneller ist: Strukturen so zu initialiseren oder Objekte mit ausschließlich Attributen über Konstruktur erstellen?Kerli hat geschrieben:Heute bin ich einmal auf eine interessante Möglichkeit von C99 gestoßen, die mir bis jetzt noch überhaupt nicht bekannt war. Es ist zwar nur der bekannt Syntacitc Sugar, es erlaubt aber leserlicheren und besser wartbareren Code zu erzeugen, vor allem beim Initialisieren von Strukturen. Wer glaubt der folgende Code ist nicht C, sollte einmal einen C-Compiler anwerfen und es selbst ausprobierenDieses Feature nennt sich im Standard übrigens designator, oder zu Deutsch "Bezeichner". In C++ ist das wohl verloren gegangen; Dafür gibt es dort Konstruktoren...
Code: Alles auswählen
typedef struct { int x; } Test; Test t[] = { [0].x = 0, [5].x = 2 }; int y[] = { [1] = 1, [2] = 2 }; struct { int member1; char member2; } blub = { .member1 = 1234, .member2 = 'h' };
Ich habe es mir vorgemerkt und werde es in den nächsten Tagen einmal eintragenXin hat geschrieben:Das habe ich auch noch nicht gesehen. Und es gefällt mir. => Wiki? ^^
So ein Vergleich ist nicht möglich da es diese Möglichkeit der Initialisierung nur in C und nicht in C++ gibt. Es gibt demnach also auch keine Konstruktoren mit denen man eine Ausführungszeit vergleichen könnte. Ansonsten resultiert eine Initialisierung mit oder ohne Designators genau in dem gleichen Code. Worauf man achten sollte ist, dass wenn man Lücken lässt, also beispielsweise in einem Array ein paar Indices freilasst, diese mit Nullen aufgefüllt werden.MoonGuy hat geschrieben:Mir gefällt's! Hat jemand mal einen Vergleich gemacht, was schneller ist: Strukturen so zu initialiseren oder Objekte mit ausschließlich Attributen über Konstruktur erstellen?