We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hallo, für folgenden Code wird nur für die Variable n3 die Warnung C184 (value possibly undefined) generiert, obwohl keine der Variablen einen definierten Wert besitzen. Wird die Warnung nur generiert, wenn die lokale Variable auf dem Stack angelegt wird? n1 und n2 sind ja eigentlich auch lokale Variablen, auch wenn sie nicht auf dem Stack angelegt werden.
#include"stdio.h" // Speichermodell ist HLARGE void main() { static int n1; int near n2;// wird zu static, da Speichermodell=HLARGE int n3; if(n1==1) n1++; if(n2==1) n2++; if(n3==1) n3++; printf("n1=%d, n2=%d, n3=%d",n1,n2,n3); }
Wenn das Programm mit der Direktive INIT compiliert wird, haben n1 und n2 einen definierten Wert (nämlich 0). Erscheint die Warnung, wenn #pragma NOINIT eingefügt wird bzw. mit der Direktive NOINIT compiliert wird?
Hallo, auch mit #pragma NOINIT gibt es nur folgende Meldungen: compiling main.c... MAIN.C(8): warning C189: 'n2': storage class changed to 'static' main.c(13): warning C184: value of 'n3' possibly undefined main.c(13): warning C184: value of 'n3' possibly undefined main.c(15): warning C184: value of 'n3' possibly undefined linking... Program Size: data=1092(near=1092) const=86(near=0) code=1304 "test1" - 0 Error(s), 4 Warning(s).
#include"stdio.h" #pragma NOINIT // Speichermodell ist HLARGE void main() { static int n1; int near n2; int n3; if(n1==1) n1++; if(n2==1) n2++; if(n3==1) n3++; printf("n1=%d, n2=%d, n3=%d",n1,n2,n3); }
obwohl keine der Variablen einen definierten Wert besitzen. Doch, besitzen sie, zumindest wenn der Compiler so eingestellt ist, dass er annaehernd so funktioniert, wie es ein C-Compiler sollte. Statische Variablen werden initialisiert: zu Null, wenn nichts anderes angegeben ist. Nur automatische sind undefiniert. Anderenfalls ist der Compiler kaputt(-konfiguriert).