uninitialisierte Variablen

29/10/2007 - 17:00 von Thomas Rachel | Report spam
Hallo,


schlagt mich, aber: bisher war ich der festen Überzeugung, daß
uninitialisierte Variablen mit modulweiter Gültigkeit automatisch mit 0
initialisiert werden.

Das Testprogramm

















#include<stdio.h>
unsigned char unin[1990000];

int main()
{
unsigned char ui[1000000];
int i=0;
for (i=0; i<sizeof(ui); i++)
printf("%d ",ui[i]);
printf("--");
for (i=0; i<sizeof(unin); i++)
printf("%d ",unin[i]);
printf("--");

}
<<<<<

(getestet mit gcc 4.1.2) bestàtigt mich in dieser Ansicht.

Jetzt habe ich gerade einen Mikrocontroller am Wickel (PIC18 mit der
MPLAB IDE 7.2 und dem C18-Compiler), der sich nicht so verhàlt. Wenn ich
hier eine Variable uninitialisiert belasse, steht dort Datenmüll drin.
Bin ich blöd, mache ich was falsch oder gehe ich völlig irr und das ist
wirklich standardkonform?


Thomas
 

Lesen sie die antworten

#1 Rainer Weikusat
29/10/2007 - 17:16 | Warnen spam
Thomas Rachel writes:
schlagt mich, aber: bisher war ich der festen Überzeugung, daß
uninitialisierte Variablen mit modulweiter Gültigkeit automatisch mit
0 initialisiert werden.

Das Testprogramm












#include<stdio.h>
unsigned char unin[1990000];

int main()
{
unsigned char ui[1000000];
int i=0;
for (i=0; i<sizeof(ui); i++)
printf("%d ",ui[i]);
printf("--");
for (i=0; i<sizeof(unin); i++)
printf("%d ",unin[i]);
printf("--");

}
<<<<<

(getestet mit gcc 4.1.2) bestàtigt mich in dieser Ansicht.

Jetzt habe ich gerade einen Mikrocontroller am Wickel (PIC18 mit der
MPLAB IDE 7.2 und dem C18-Compiler), der sich nicht so verhàlt. Wenn
ich hier eine Variable uninitialisiert belasse, steht dort Datenmüll
drin.



Objekte mit 'static storage duration', die nicht anderweitig
initialisert wurden, sollen auf einen geeigneten Nullwert gesetzt
werden (6.7.8|10).

Ähnliche fragen