Als VLAs in C 1999 eingeführt wurden, fand ich, dass dies eine große Neuerung für die Sprache war. Nachdem ich jedoch erfahren habe, dass es in C 2011 optional ist, frage ich mich, was zu seiner Statusänderung geführt hat und ob es bedeutet, dass die Funktion tatsächlich veraltet ist. Wenn ja, gibt es einen entsprechenden Begriff für die automatische Verwaltung von Daten mit dynamischer Größe, der diese ersetzen soll?
Ich habe versucht, das C 2011-Grunddokument zu finden, aber es scheint noch nicht veröffentlicht zu sein.
c
language-features
c11
jxh
quelle
quelle
Antworten:
Ich habe Legenden gehört, die von "es sollte optional sein, da einige kleine Compiler in der Lage sein sollten, ohne VLAs C11-kompatibel zu sein" bis zu "es war ein Fehler an erster Stelle" reichen. Ich habe jedoch nie eine wahre und eindeutige Antwort auf diese Frage erhalten. Letztendlich glaube ich nicht, dass jemand wirklich einen hat, da der Grund (vorausgesetzt - und hoffentlich - es gibt einen) nie bekannt gegeben wurde (soweit meine alten Recherchen gingen).
Aus Kapitel 4 (Seite 13) von Rationale for International Standard - Programmiersprachen - C 5.10 (2003)
Betonung meiner. Beachten Sie, dass diese Entscheidung ihrer eigenen Begründung zuwiderläuft. Noch eine andere Sache optional gemacht. Jetzt bekommst du entweder
__STDC_NO_VLA__
VLA oder Support. Es ist eine sehr seltsame Entscheidung.quelle
Soweit ich aus den Dokumenten des öffentlichen Ausschusses (insbesondere N1395 ) ermitteln kann, bestand einer der Hauptgründe für die Optionierung von VLAs (zusammen mit komplexer Arithmetik und Threading) darin, die Erstellung konformer C-Compiler für kleine eingebettete Prozessoren zu ermöglichen.
Der Trend ging dahin, dass die Compiler-Anbieter, die auf Embedded-Systeme abzielen, auf dem C90-Standard blieben, da die großen Funktionen eingeführt wurden, nach denen ihre Kunden nicht fragten.
quelle