2016-07-12 11 views
-2

Der folgende Code druckt AA:Unerwartete Ausgabe in C-Code

#include <stdio.h> 
int main() 
{ 
    for(int i;i;i--) 
     printf("A"); 
    return 0; 
} 

Warum der Anfangswert der Variable i2 ist, und nicht irgendein Wert Müll?

Ist die Lebensdauer der Variablen i statisch oder automatisch?

+5

2 ist ein Müllwert. – chux

+0

@chux Wie können Sie sicher sein? – Codor

+2

Dieses Programm weist ein undefiniertes Verhalten für die Verwendung des Werts eines Objekts mit ** automatischer Speicherdauer ** auf, wenn es nicht initialisiert ist. – EOF

Antwort

1

Der Gültigkeitsbereich der Variablen i ist die gesamte for-Anweisung (einschließlich ihres Rumpfs). Es hat die automatische Speicherdauer und wird nach dem Verlassen der Schleife zerstört. Sie können erklären, es nicht als die statische Lagerdauer, wie zum Beispiel

for(static int i;i;i--) 
    printf("A"); 

Da die Variable i nicht initialisiert wurde einen unbestimmten Wert hat, der eine Falle Wert sein kann.

+0

Wenn es ein Trap-Wert ist, würde es immer noch UB verursachen? – ameyCU

+0

@ameyCU Ja, es kann zu einer Ausnahme kommen. –

2

Anscheinend wird die Variable i nicht initialisiert. Dies bedeutet, dass das Verhalten der Implementierung nicht definiert ist. Und der Wert i ist nur Müllwert. Hier ist es 2.

+0

@EugeneSh. Danke für die Bearbeitung. – Codor

Verwandte Themen