[C] Variablen initialisieren

Herakles

Profifragensteller
Moin!

Bislang initialisiere ich Variablen innerhalb von C immer so:

Code:
int i, j, k;
i = j = k = 0;

Kann man sowas nicht auch in einer Zeile lösen? Je weniger Codezeilen, umso beeindruckender ;) Mir geht's ein wenig auf den Wecker, alle Variablen zu definieren und zu initialisieren. Mit Arrays geht das ja ganz toll beim Definieren (int toll[5] = {0}; ). Ideen?

Viele Grüße
Herakles
 
Dettus Idee sieht gut aus. Bei structs kann man übrigens das hier machen:

Code:
struct foo {
    int bar;
    char baz;
};

memset(foo, 0, sizeof *foo);
 
Ich wollte nur sichergehen, dass ich vor lauter Bäumen den Wald nicht sehe. Das kommt bei mir gerne mal vor :)

Vielen Dank!

Herakles
 
Dettus Idee sieht gut aus. Bei structs kann man übrigens das hier machen:

Code:
struct foo {
    int bar;
    char baz;
};

memset(foo, 0, sizeof *foo);
memset funktioniert auch bei integern:
Code:
int i;
memset(&i,0,sizeof(int));
aber du hast da noch nen tippelfehler: das muss sizeof(foo) heisst, und nicht sizeof*foo. und muss auch memset(&foo heissen.
 
*hust*
Gleich in den ersten Zeilen des Codes zusehen, dass er unleserlich wird?

int i = 0;
int j = 0;
...
 
Bei solchen simplen Sachen geht das ja alles noch, aber wenn ich z.B. sowas lese, kriege ich das kotzen:

Code:
if(methode1() =! 1 && methode2() == 3)
else if (methode3()==5)

Mal so als Beispiel. Das geht mal gar nicht :D
 
Je weniger Codezeilen, umso beeindruckender ;)

Zwar finde ich die Aussage unsinnig, aber hier mein Tipp: Platziere die Variable ausserhalb einer Funktion, so dass der Linker sie ins Datensegment (.bss) des Binaries tut. Damit überlässt Du das initialisieren auf 0 dem Lader:

Code:
int i, j, k;

void methode(void) {
}

Mehrmaliges Verletzen von Schnittstellen und Abstraktionen macht den Code aber definitiv nicht lesbarer, wie andere hier schon richtig angemerkt haben.
 
Zwar off-topic, aber was soll's...

wenn ich z.B. sowas lese, kriege ich das kotzen:

Code:
if(methode1() =! 1 && methode2() == 3)
else if (methode3()==5)

Wie so oft kommt's auf das Einsatzgebiet an. Wenn's um Hardwareregister geht ist so etwas:

Code:
if (errorFlag(reg)) {

}

oft lesbarer als

Code:
if (reg & 0x80) {

}

Das letzte Beispiel wird auch nicht wirklich besser, wenn man eine Konstante verwendet. Spätestens wenn man das Bit "active low" ist, d.h. die Bedingung wahr ist, wenn das Bit 0 zeigt.
 
Zurück
Oben