2016-09-13 2 views
2

finde ich, dass ein Arrays in der Erklärung, wir die Größe davon wie dieseWarum ist int a [0] in C++ erlaubt?

int a[0]; 

I, leere Größe Array illegal in C++ weiß nicht angeben können, aber in meinem Code, Compiler leer Größe Array erlaubt und geben die Ausgabe.

Mein Code ist hier:

#include <iostream> 
using namespace std; 

int main() 
{ 
     int a[0]; 

     a[0] = 10; 
     a[1] = 20; 

     cout<<a[0]<<endl; 
     cout<<a[1]<<endl; 

     return 0; 
} 

Ausgang:

10 
20 

Online-Compiler Link: http://code.geeksforgeeks.org/TteOmO

Also, meine Frage: Warum ist int a[0] GCC Compiler erlaubt?

+0

Doing 'int a [0]; a [0] = 10; a [1] = 20; 'führt zu FireWorks (UB). – sameerkn

+1

OP weiß, dass es falsch ist, Frage ist, warum der Compiler keinen Fehler auslöst. Antwort auf die, ich nehme an, wäre, dass es nicht alles für Sie tun kann;) – slawekwin

+0

'Fehler: ISO C++ verbietet Null-Größe-Array 'a' [-Wpedantic] int a [0];' – Praveen

Antwort

0

Es ist nicht erlaubt. Es ist undefined Verhalten.

Wahrscheinlich in Ihrem Beispiel Programm wird Speicher bei Stapel verwenden, der vor Ihrer aktuellen Position liegt. Es wird von MemorySanitizer erkannt, und wenn Sie mehr als 2 Bytes versetzen, überschreiben Sie schließlich die Absenderadresse. Das wird zu einem Arbeitsgedächtnis führen.

5

Es gibt eine Warnung aus, zum Beispiel Klirren Ausgänge:

warning: zero size arrays are an extension [-Wzero-length-array] 

dies ist nicht definiertes Verhalten:

a[0] = 10; 
    a[1] = 20; 

Nulllänge Arrays Erweiterungen für gcc sind, warum - Sie hier lesen:

https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

They are very useful as the last element of a structure that is really a header for a variable-length object:

Dies ist eigentlich C-Erweiterung, aber es sieht so aus, als ob es auch in C++ verwendet wird, wahrscheinlich um die Verwendung bestehender Strukturen aus C, die diese Erweiterung verwenden, zu vereinfachen.

+0

Kommentieren Sie auch, dass die portabelere Lösung für diese Art von Strukturen ein Array ohne Größe ist, wie 'a []'. Dies wird in C99 hinzugefügt: http://StackOverflow.com/a/17185530/3742943 – LoPiTaL

Verwandte Themen