Obwohl VLAs in C99 standardisiert wurden, sind sie nicht Teil des C-Standards. Dennoch akzeptieren Compiler wie g und clang VLA-Deklarationen mit einer Warnung unter der Flagge -pedantic.
Compiler haben die Flexibilität, nicht standardmäßige Funktionen einzuschließen, um die Kompatibilität mit Legacy-Code aufrechtzuerhalten um den Programmierkomfort zu erhöhen. In diesem Fall entschieden sich die Compiler-Autoren dafür, VLA-Deklarationen zuzulassen, um die Migration von C99 nach C zu erleichtern.
Der C-Standard besagt ausdrücklich, dass Arrays nur mit konstanten Größen deklariert werden können. VLA-Deklarationen, deren Größe zur Kompilierungszeit nicht bekannt ist, verstoßen gegen diese Regel und gelten daher in C als illegal.
Trotz des Verbots des Standards übersetzt der Compiler VLAs in Code das scheint Speicher auf dem Stapel zu reservieren. Dieses Verhalten wird jedoch nicht durch den C-Standard spezifiziert und ist lediglich ein Implementierungsdetail des Compilers.
Während VLAs in bestimmten Szenarien Flexibilität bieten, ist es wichtig zu verstehen, dass dies nicht der Fall ist Teil des C-Standards. Compiler akzeptieren sie möglicherweise aus Kompatibilitätsgründen, ihre Verwendung sollte jedoch mit Vorsicht erfolgen und in standardkonformem Code nicht als verlässlich angesehen werden. Konsultieren Sie immer die Dokumentation Ihres Compilers für bestimmte nicht standardmäßige Funktionen, die unterstützt werden.
Das obige ist der detaillierte Inhalt vonAkzeptieren C-Compiler Variable-Length-Arrays (VLAs) und wenn ja, warum?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!