Im Ladedatenteil eines in C geschriebenen Programms sehe ich die Initialisierung eines Puffers wie folgt:
%Vor%Aber ich bin mir nicht sicher, welche Werte durch diese Aussage zugewiesen werden. Bitte teilen Sie einige Ideen.
Hängt das vom Compiler ab oder ist es eine Sprachfunktion?
Und was ist der Punkt, der nach dieser Null ein Komma verwendet, wenn diese Aussage äquivalent ist zu:
%Vor%Ist es zufällig, weil der Programmierer nur sicherstellen will, dass das erste Element Null ist und sich nicht um den Rest kümmert?
Hängt das vom Compiler ab oder ist es eine Sprachfunktion?
Das Verhalten wird durch den Sprachstandard festgelegt. Der aktuelle Standard ( C11 §6.7.9 Initialisierung / 21 (auf Seite 141) beschreibt, was passiert, wenn Sie weniger Initialisierer als Elemente eines Aggregats bereitstellen:
Wenn in einer geschichteten Liste weniger Initialisierer vorhanden sind als Elemente oder Mitglieder eines Aggregats oder weniger Zeichen in einem Zeichenfolgenliteral, das zum Initialisieren eines Arrays mit bekannter Größe verwendet wird, als Elemente im Array vorhanden sind, wird der Rest von das Aggregat soll sein implizit genauso initialisiert wie Objekte mit statischer Speicherdauer.
Also werden die Elemente, die nicht angegeben sind, auf %code%
initialisiert.
Die angegebenen Werte (in diesem Fall ein einzelnes 0
) werden verwendet, und dann werden alle anderen Elemente mit Nullen aufgefüllt.
Hätten Sie char buffer[100] = {1, };
gesagt, würde das Array eine 1 und 99 Nullen enthalten.
buffer[100] = {literal, }
initialisiert das erste Element mit dem Literalwert und den Rest mit 0
. Auf der anderen Seite initialisiert buffer[100] = {0}
alle Elemente auf 0
. Ihr Code entspricht buffer[100] = {0}
, da beide alle initialisieren elements zu 0.RichieHindles buffer[100] = {1, }
veranschaulicht den ganzen Punkt.
Initialisierer für ein Array einer gegebenen Größe werden Array-Mitgliedern auf einer Eins-zu-Eins-Basis zugewiesen. Wenn zu wenig Initialisierer für alle Member vorhanden sind, werden die verbleibenden Member auf 0 initialisiert. Zu viele Initialisierer für ein Array bestimmter Größe aufzulisten ist ein Fehler.
Tags und Links c