Wert der nicht initialisierten Elemente im Array der C-Sprache

9

Ich habe ein Array von 3 Elementen. Aber ich möchte nur 2 von ihnen initialisieren. Ich lasse das dritte Element leer.

%Vor%

Das Druckergebnis ist 0. Ich habe es auf IAR und einigen Online-Compiler getestet.

Gibt es eine C-Regel für den Wert des dritten Elements? Gibt es einen Compiler, der das dritte Element mit 0xFF füllt? (Vor allem Cross-Compiler)

    
Ngo Thanh Nhan 22.09.2015, 04:05
quelle

3 Antworten

11

Ja, der C-Standard definiert, was in diesem Fall passiert. Also nein, es sollte keinen Compiler geben, der C-konform ist, der in diesem Fall mit 0xFF initialisiert.

In Abschnitt 6.7.9 des Standards heißt es:

  

Initialisierung

     

...

     

10 ... Wenn ein Objekt mit statischer oder Thread-Speicherdauer dies nicht ist   explizit initialisiert, dann:

     
  • wenn es einen Zeigertyp hat, wird es mit einem Nullzeiger initialisiert;
  •   
  • wenn es arithmetischen Typ hat, ist es   initialisiert auf (positiv oder vorzeichenlos) Null;
  •   
  • wenn es ein Aggregat ist,   Jedes Mitglied wird (rekursiv) gemäß diesen Regeln initialisiert.   und jedes Auffüllen wird auf Null Bits initialisiert;
  •   
  • Wenn es sich um eine Union handelt, wird das erste benannte Mitglied gemäß diesen Regeln initialisiert (rekursiv), und jedes Padding wird auf null Bits initialisiert;
  •   

...

     

21 Wenn in einer Liste mit geschweiften Klammern weniger Initialisierer vorhanden sind als dort   sind Elemente oder Mitglieder eines Aggregats oder weniger Zeichen in einem   Zeichenfolgenliteral, das verwendet wird, um ein Array bekannter Größe als dort zu initialisieren   sind Elemente in der Anordnung, der Rest des Aggregats soll sein   implizit genauso wie Objekte mit statischem Speicher initialisiert   Dauer.

    
kaylum 22.09.2015, 04:17
quelle
0

Von diesem Beitrag scheint es, dass diese Syntax alle Elemente nach dem Komma auf Null initialisiert. Außerdem; Alle nicht initialisierten Daten im Datensegment des Programms (mit anderen Worten alle nicht initialisierten globalen Variablen) werden automatisch auf Null gesetzt. Wenn Sie also nach einem undefinierten Verhalten in diesem Programm suchen, gibt es keine; es wird immer 0 sein.

    
Joshua Rahm 22.09.2015 04:19
quelle
0

Dies kann mit gcc extension wie folgt erreicht werden Zeichenfeld ohne Vorzeichen [10] = {1,2, [2 ... 9] = 0xFF};

    
Palanivelrajan K 22.09.2015 04:25
quelle

Tags und Links