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)
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.
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.
Dies kann mit gcc extension wie folgt erreicht werden Zeichenfeld ohne Vorzeichen [10] = {1,2, [2 ... 9] = 0xFF};
Tags und Links c arrays initialization