Was ist der Unterschied zwischen {0} und ""?

7

Ich würde gerne wissen, ob es einen Unterschied zwischen:

gibt %Vor%

und:

%Vor%

Danke.

    
md5 25.04.2012, 13:14
quelle

5 Antworten

18

Nein, es gibt keinen Unterschied zwischen beiden Deklarationen:

%Vor%

Siehe den relevanten Abschnitt der C-Norm (Hervorhebung von mir):

  

(C99, 6.7.8p21) "Wenn in einer Liste mit geschweiften Klammern weniger Initialisierer vorhanden sind als Elemente oder Mitglieder eines Aggregats, werden oder weniger Zeichen in einem Zeichenfolgeliteral zum Initialisieren von Array mit bekannter Größe, als es Elemente im Array gibt, der Rest des Aggregats soll implizit genauso initialisiert werden wie Objekte mit statischer Speicherdauer. "

    
ouah 25.04.2012, 13:16
quelle
10

In diesem Fall gibt es keinen Unterschied, beide initialisieren alle Slots des Arrays auf 0. Im Allgemeinen funktioniert "" nur für char Arrays (mit oder ohne Modifikationen wie const oder unsigned ), aber {0} funktioniert für Arrays aller numerischen Typen.

In Abschnitt 6.7.9 des Standards (n1570) wird in Punkt 21

gelesen
  

Wenn in einer Liste mit geschweiften Klammern weniger Initialisierer vorhanden sind als Elemente oder Elemente   eines Aggregats oder weniger Zeichen in einem Zeichenfolgenliteral, das zum Initialisieren eines bekannten Arrays verwendet wird   Größe als es Elemente in der Anordnung gibt, soll der Rest des Aggregats sein   implizit genauso initialisiert wie Objekte mit statischer Speicherdauer.

, damit sogar "" das komplette Array initialisiert.

    
Daniel Fischer 25.04.2012 13:16
quelle
2

Das Ergebnis beider Ausdrücke ist dasselbe: eine leere Zeichenfolge. Der erste ist jedoch expliziter und damit besser lesbar.

    
Péter Török 25.04.2012 13:16
quelle
2

Zusätzlich zu dem, was bereits gesagt wurde:

%Vor%

=

%Vor%

=

%Vor%

=

%Vor%

All dies führt dazu, dass genau der gleiche Maschinencode ist: ein 32-Byte-Array, das mit Nullen gefüllt ist.

    
Lundin 25.04.2012 13:27
quelle
2

Es gibt keinen Unterschied. Sie können auch selbst sehen! Das ist die zuverlässigste Antwort, die Sie bekommen können. Verwenden Sie einfach einen Debugger. Führen Sie die zwei Zeilen aus und vergleichen Sie das Ergebnis. Aber Sie sollten die Arrays umbenennen. Ich benutze gcc / gdb und kompiliere den folgenden Code

%Vor%

über gcc -g test.c und dann gdb a.out aufrufen. In gdb gebe ich

ein %Vor%

Die letzte Anweisung wird von gdb mit folgender Ausgabe beantwortet:

%Vor%

Ich fahre fort und gebe "print t" ein und bekomme entsprechend

%Vor%

Das sagt mir, dass beide Anweisungen mit meinem Compiler der Wahl zum selben Ergebnis führen.

    
Matthias 25.04.2012 13:18
quelle

Tags und Links