Warnung bei nicht (vollst.) init. struct

OP #2196647
Lesenswert?

Hallo zusammen,

Gibt es eine Möglichkeit, mit der gcc warnt, wenn ein struct wie im 
Beispiel nicht vollständig initialisiert, aber benutzt wird? Dieser 
Fehler hat mich gerade einiges an Zeit gekostet.
1
#include <stdio.h>
2

3
typedef struct 
4
{
5
    int a;
6
    int b;
7
    int c;
8
} tFoo;
9

10
void doStuff(tFoo* p)
11
{
12
    printf("%d, %d, %d\n", p->a, p->b, p->c);
13
}
14

15
int main(void)
16
{
17
    tFoo x;
18
    x.a = 0;
19
    x.b = 1;
20
    // x.c ist nicht initialisiert.
21
    doStuff(&x);
22
    return 0;
23
}

Ideal wäre, wenn alles außer
1
 
2
tFoo x; x.a = 0; x.b = 0; x.c = 0;
oder
1
tFoo x = {0; 1; 2};
eine Warnung produziert. "gcc -Wall -Wextra -Wuninitialized" tut das 
leider nicht, passendere Optionen habe ich in der manpage nicht 
gefunden.

Grüße,
Tom
Gast #2196674
Lesenswert?

Darf's auch ein ctor sein?

Du könntest die Member als const deklarieren und einen ctor mit
den benötigten Parametern schreiben.

D.h die Member können nur (und müssen) im ctor gesetzt werden, was 
zumindest zu deinem Beispiel passt.




Grüße
Tobi
OP #2222899
Lesenswert?

Danke für alle Antworten!

Ihr habt natürlich recht, die Frage war nicht richtig überlegt. Dass es 
so wie gedacht prinzipbedingt gar nicht funktionieren kann, habe ich 
jetzt eingesehen ;).

Etwas Constructor-Ähnliches ist sicher eine gute Idee, in die Richtung 
wird es gehen. Komplett initialisieren würde sehr unübersichtlich, da 
das (gegebene) struct in meiner Anwendung noch viel mehr Member hat, die 
nicht initialisiert werden müssen.
1
tFoo x;
2
initFoo(&x, 0, 1, 2);
finde ich lesbarer als
1
tFoo x = {0; 1; 2; 0; 0; 0; 0; 0; 0 /* noch viele Nullen mehr */};

Grüße,
Tom

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren