Forum: Mikrocontroller und Digitale Elektronik Struct initialisieren?


von Sven K. (mueslifresser)


Lesenswert?

Hi,

Warum kann ich mit dem GCC nicht folgenden Code Compilieren?
1
struct StrukturName {
2
        double d;
3
        int i;
4
} StrukturVariable1 = { 1.1, 55}, StrukturVariable2 = { i = 1234, d = 31.22 };

Die "StrukturVariable1" alleine geht, nur bei "StrukturVariable2" gibt 
er die Fehlermeldung das er i und d nicht kennt.

Error  2  'd' undeclared here (not in a function)
Error  1  'i' undeclared here (not in a function)

Kann mir da jemand helfen?

Grüße,
Sven

von Nico S. (nico22)


Lesenswert?

Lass es bei StrukturVariable2 weg, genau so wie du es ja bei 
SturkturVariable1 auch nicht hingeschrieben hast.

von Daniel -. (root)


Lesenswert?

Warum sollte gcc das können? Weil es dir als naheliegend erscheint? ;-)
Konsultiere doch den C Standard dazu. Ich meine mich dunkel zu
erinnern (schon etwas länger aus dem Programmieren), dass in C99
die Initialisierungsvariante

struct X{int i; char c;} x = {.i=1, .c='A'};

möglich ist.

von Sven K. (mueslifresser)


Lesenswert?

> struct X{int i; char c;} x = {.i=1, .c='A'};

Das Funktioniert, Super - DANKE!!!

Ich finde diese Variante weitaus übersichtlicher.

Nur die Frage wer jetzt den Wikipedia-Artikel nachbessert aus dem ich 
das Fehlerhafte Code-Fragment kopiert habe?

http://de.wikipedia.org/wiki/Struktur_%28Datentyp%29

Grüße,
Sven

von Markus G. (thechief)


Lesenswert?

Hallo Sven,

und so klappts auch mit dem Compiler:
1
#include <stdio.h>
2
3
int main (void)
4
{
5
  struct StrukturName {
6
        double d;
7
        int i;
8
  } StrukturVariable1 = {1.1, 55}, StrukturVariable2 = {31.22, 1234};
9
10
  printf("%f, %d",StrukturVariable1.d, StrukturVariable1.i);
11
  printf("%f, %d",StrukturVariable2.d, StrukturVariable2.i);
12
}

Achtung: Ich habe bei der Definition der zweiten Strukturvariable die 
beiden Parameter vertauscht, um nicht einer Integer-Variablen einen 
Fließkommawert zuzuweisen!


Gruß

Markus

von Sven K. (mueslifresser)


Lesenswert?

Hi,

@ Markus: Danke für deinen Beitrag. Mir geht es vor allem um die 
Initialisierung. Da finde ich die Variante 2 besonders bei größeren 
Konstrukten schon sehr hilfreich.

Ich habe es jetzt aber hinbekommen und überlege noch, ob ich den 
Wikipediaartikel ändenr soll. Oder ob das vom Compiler / C-Standart 
abhängt und so schon seine richtigkeit hat....

Grüße,
Sven

von (prx) A. K. (prx)


Lesenswert?

Sven Klass schrieb:

> überlege noch, ob ich den
> Wikipediaartikel ändenr soll.

Schon geschehen, wurde aber noch nicht gesichtet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.