https://de.wikipedia.org/w/index.php?action=history&feed=atom&title=Variable_Length_Array Variable Length Array - Versionsgeschichte 2025-05-23T01:12:38Z Versionsgeschichte dieser Seite in Wikipedia MediaWiki 1.45.0-wmf.2 https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=240280550&oldid=prev Thomas Dresler: Anpassung 2023-12-17T21:53:50Z <p>Anpassung</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 17. Dezember 2023, 23:53 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 11:</td> <td colspan="2" class="diff-lineno">Zeile 11:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb’s, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf dem [[Dynamischer Speicher|Heap]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/c/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 14. Februar 2016&lt;/ref&gt;</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb’s, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf dem [[Dynamischer Speicher|Heap]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: <ins style="font-weight: bold; text-decoration: none;">[</ins>http://www.coding-guidelines.com/cbook/cbook1_2.pdf <ins style="font-weight: bold; text-decoration: none;">PDF]</ins>. Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/c/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 14. Februar 2016&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> </tr> </table> Thomas Dresler https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=238243103&oldid=prev Aka: Tippfehler entfernt, Kleinkram 2023-10-17T21:13:52Z <p><a href="/wiki/Benutzer:Aka/Tippfehler_entfernt" title="Benutzer:Aka/Tippfehler entfernt">Tippfehler entfernt</a>, Kleinkram</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 17. Oktober 2023, 23:13 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein ''' Variable Length Array (VLA)''' ist ein [[Datentyp]] der [[C (Programmiersprache)|Programmiersprache C]]. Es handelt sich um ein [[Feld (Datentyp)|Feld]] ({{EnS|''Array''}}), dessen Größe erst zur Laufzeit, d.&amp;nbsp;h. variabel, festgelegt wird.<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein ''' Variable Length Array (VLA)''' ist ein [[Datentyp]] der [[C (Programmiersprache)|Programmiersprache C]]. Es handelt sich um ein [[Feld (Datentyp)|Feld]] ({{EnS|''Array''}}), dessen Größe erst zur Laufzeit, d.&amp;nbsp;h. variabel, festgelegt wird.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Funktionsweise und Anwendung ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Funktionsweise und Anwendung ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zum klassischen [[Feld (Datentyp)#Standard-Feld|Vektor]], dessen Größe zum Zeitpunkt der Übersetzung festgelegt wird,&lt;ref&gt;Kernighan/Ritchie: ''Programmieren in C - Mit dem C-Referenz Manual in deutscher Sprache'', Hanser 1990, 2. Auflage&lt;/ref&gt; führt der [[Varianten der Programmiersprache C#C99|C99]]-Standard das Konzept variabler Array-Größen ein. Bei der Definition eines Feldes kann dessen Größe durch einen beliebigen ganzzahligen Ausdruck bestimmt werden.<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zum klassischen [[Feld (Datentyp)#Standard-Feld|Vektor]], dessen Größe zum Zeitpunkt der Übersetzung festgelegt wird,&lt;ref&gt;Kernighan/Ritchie: ''Programmieren in C - Mit dem C-Referenz Manual in deutscher Sprache'', Hanser 1990, 2. Auflage&lt;/ref&gt; führt der [[Varianten der Programmiersprache C#C99|C99]]-Standard das Konzept variabler Array-Größen ein. Bei der Definition eines Feldes kann dessen Größe durch einen beliebigen ganzzahligen Ausdruck bestimmt werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>; Beispiel Vektor und VLA</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>; Beispiel Vektor und VLA</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="c"&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="c"&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>void foo(unsigned int len) {<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>void foo(unsigned int len) {</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> int vector[3] = { 14, 4, 7 }; /* initialisiertes Feld fixer Größe */</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> int vector[3] = { 14, 4, 7 }; /* initialisiertes Feld fixer Größe */</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> int vla[len]; /* VLA entsprechend dem Parameter len */</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> int vla[len]; /* VLA entsprechend dem Parameter len */</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 10:</td> <td colspan="2" class="diff-lineno">Zeile 10:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block.<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. <del style="font-weight: bold; text-decoration: none;">Dobb's</del>, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf dem [[Dynamischer Speicher|Heap]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/c/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 14. Februar 2016&lt;/ref&gt;<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. <ins style="font-weight: bold; text-decoration: none;">Dobb’s</ins>, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf dem [[Dynamischer Speicher|Heap]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/c/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 14. Februar 2016&lt;/ref&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 20:</td> <td colspan="2" class="diff-lineno">Zeile 20:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>char* reverse_string(char* in_out){</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>char* reverse_string(char* in_out){</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> unsigned int len = strlen(in_out);<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> unsigned int len = strlen(in_out);</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> char tmp[len + 1]; // VLA für String und Nullterminierung</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> char tmp[len + 1]; // VLA für String und Nullterminierung</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> strcpy(tmp, in_out);</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> strcpy(tmp, in_out);</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 36:</td> <td colspan="2" class="diff-lineno">Zeile 36:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Funktion &lt;code&gt;reverse_string()&lt;/code&gt; verwendet die lokale Variable &lt;code&gt;tmp&lt;/code&gt; als VLA; dieses nimmt den übergebenen String auf. Im Anschluss wird der String in umgekehrter Reihenfolge wieder in den Ein-/Ausgabeparameter &lt;code&gt;in_out&lt;/code&gt; zurückgeschrieben.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Funktion &lt;code&gt;reverse_string()&lt;/code&gt; verwendet die lokale Variable &lt;code&gt;tmp&lt;/code&gt; als VLA; dieses nimmt den übergebenen String auf. Im Anschluss wird der String in umgekehrter Reihenfolge wieder in den Ein-/Ausgabeparameter &lt;code&gt;in_out&lt;/code&gt; zurückgeschrieben.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs generieren, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt;<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs generieren, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.&amp;nbsp;h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden.&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt;<del style="font-weight: bold; text-decoration: none;"> </del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.&amp;nbsp;h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden.&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> Aka https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=176523365&oldid=prev Aka: /* Auswirkungen */ Abkürzung korrigiert 2018-04-15T08:49:15Z <p><span class="autocomment">Auswirkungen: </span> Abkürzung korrigiert</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 15. April 2018, 10:49 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 38:</td> <td colspan="2" class="diff-lineno">Zeile 38:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs generieren, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs generieren, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden.&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.<ins style="font-weight: bold; text-decoration: none;">&amp;nbsp;</ins>h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden.&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> Aka https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=171547258&oldid=prev 2003:DF:4BE8:500:8DE4:43A2:A26E:3257: Die Übersetzung von „Heap“ mit „Halde“ ist unsinnig → entfernt. 2017-11-30T19:07:19Z <p>Die Übersetzung von „Heap“ mit „Halde“ ist unsinnig → entfernt.</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 30. November 2017, 21:07 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 11:</td> <td colspan="2" class="diff-lineno">Zeile 11:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf <del style="font-weight: bold; text-decoration: none;">der</del> [[Dynamischer Speicher|<del style="font-weight: bold; text-decoration: none;">Halde (</del>Heap<del style="font-weight: bold; text-decoration: none;">)</del>]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/c/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 14. Februar 2016&lt;/ref&gt; </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf <ins style="font-weight: bold; text-decoration: none;">dem</ins> [[Dynamischer Speicher|Heap]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/c/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 14. Februar 2016&lt;/ref&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> </tr> </table> 2003:DF:4BE8:500:8DE4:43A2:A26E:3257 https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=168841811&oldid=prev 2003:75:4F60:3BB5:2C89:18DF:71B7:73CD: /* Funktionsweise und Anwendung */Tippfehler korrigiert 2017-09-06T16:00:40Z <p><span class="autocomment">Funktionsweise und Anwendung: </span>Tippfehler korrigiert</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 6. September 2017, 18:00 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 36:</td> <td colspan="2" class="diff-lineno">Zeile 36:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Funktion &lt;code&gt;reverse_string()&lt;/code&gt; verwendet die lokale Variable &lt;code&gt;tmp&lt;/code&gt; als VLA; dieses nimmt den übergebenen String auf. Im Anschluss wird der String in umgekehrter Reihenfolge wieder in den Ein-/Ausgabeparameter &lt;code&gt;in_out&lt;/code&gt; zurückgeschrieben.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Die Funktion &lt;code&gt;reverse_string()&lt;/code&gt; verwendet die lokale Variable &lt;code&gt;tmp&lt;/code&gt; als VLA; dieses nimmt den übergebenen String auf. Im Anschluss wird der String in umgekehrter Reihenfolge wieder in den Ein-/Ausgabeparameter &lt;code&gt;in_out&lt;/code&gt; zurückgeschrieben.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs <del style="font-weight: bold; text-decoration: none;">generierten</del>, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs <ins style="font-weight: bold; text-decoration: none;">generieren</ins>, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden.&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden.&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> </tr> </table> 2003:75:4F60:3BB5:2C89:18DF:71B7:73CD https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=157654435&oldid=prev 78.54.133.207: /* Abgrenzung zu anderen Programmiersprachen */ 2016-09-04T14:37:28Z <p><span class="autocomment">Abgrenzung zu anderen Programmiersprachen</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 4. September 2016, 16:37 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 42:</td> <td colspan="2" class="diff-lineno">Zeile 42:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Abgrenzung zu anderen Programmiersprachen ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Abgrenzung zu anderen Programmiersprachen ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>VLAs sind C-spezifisch und werden nicht vom C++-Standard übernommen. [[C++]] bietet Container-Klassen, die variable Felder ermöglichen. Die Programmiersprachen [[APL (Programmiersprache)|APL]] und [[Perl (Programmiersprache)|Perl]] unterstützen beispielsweise Felder, <del style="font-weight: bold; text-decoration: none;">dessen</del> Größe zur Laufzeit verändert werden <del style="font-weight: bold; text-decoration: none;">können</del>.&lt;ref name="Jones08" /&gt; Arrays in [[Java (Programmiersprache)|Java]] haben eine feste Größe. Da sie dynamisch angelegt werden, können wie bei VLAs die Größen zur Laufzeit festgelegt werden.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>VLAs sind C-spezifisch und werden nicht vom C++-Standard übernommen. [[C++]] bietet Container-Klassen, die variable Felder ermöglichen. Die Programmiersprachen [[APL (Programmiersprache)|APL]] und [[Perl (Programmiersprache)|Perl]] unterstützen beispielsweise Felder, <ins style="font-weight: bold; text-decoration: none;">deren</ins> Größe zur Laufzeit verändert werden <ins style="font-weight: bold; text-decoration: none;">kann</ins>.&lt;ref name="Jones08" /&gt; Arrays in [[Java (Programmiersprache)|Java]] haben eine feste Größe. Da sie dynamisch angelegt werden, können wie bei VLAs die Größen zur Laufzeit festgelegt werden.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Einzelnachweise ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Einzelnachweise ==</div></td> </tr> </table> 78.54.133.207 https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=151510645&oldid=prev Ajv39: Weblink aktualisiert 2016-02-14T21:18:45Z <p>Weblink aktualisiert</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 14. Februar 2016, 23:18 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 11:</td> <td colspan="2" class="diff-lineno">Zeile 11:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf der [[Dynamischer Speicher|Halde (Heap)]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/<del style="font-weight: bold; text-decoration: none;">seccode</del>/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am <del style="font-weight: bold; text-decoration: none;">12</del>. <del style="font-weight: bold; text-decoration: none;">August</del> <del style="font-weight: bold; text-decoration: none;">2014</del>&lt;/ref&gt; </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. October 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf der [[Dynamischer Speicher|Halde (Heap)]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/<ins style="font-weight: bold; text-decoration: none;">c</ins>/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am <ins style="font-weight: bold; text-decoration: none;">14</ins>. <ins style="font-weight: bold; text-decoration: none;">Februar</ins> <ins style="font-weight: bold; text-decoration: none;">2016</ins>&lt;/ref&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> </tr> </table> Ajv39 https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=134206633&oldid=prev Ajv39: kl 2014-09-20T17:42:21Z <p>kl</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 20. September 2014, 19:42 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 1:</td> <td colspan="2" class="diff-lineno">Zeile 1:</td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein ''' Variable Length Array (VLA)''' ist ein [[Datentyp]] der [[C (Programmiersprache)|Programmiersprache C]]. Es handelt sich um ein [[Feld (Datentyp)|Feld]] ({{EnS|''Array''}}), dessen Größe erst zur Laufzeit, d.h. variabel, festgelegt wird. </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein ''' Variable Length Array (VLA)''' ist ein [[Datentyp]] der [[C (Programmiersprache)|Programmiersprache C]]. Es handelt sich um ein [[Feld (Datentyp)|Feld]] ({{EnS|''Array''}}), dessen Größe erst zur Laufzeit, d.<ins style="font-weight: bold; text-decoration: none;">&amp;nbsp;</ins>h. variabel, festgelegt wird. </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Funktionsweise und Anwendung ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Funktionsweise und Anwendung ==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zum klassischen [[Feld (Datentyp)#Standard-Feld|Vektor]], dessen Größe zum Zeitpunkt der Übersetzung festgelegt wird&lt;ref&gt;Kernighan/Ritchie: ''Programmieren in C - Mit dem C-Referenz Manual in deutscher Sprache'', Hanser 1990, 2. Auflage&lt;/ref&gt;<del style="font-weight: bold; text-decoration: none;">,</del> führt der [[Varianten der Programmiersprache C#C99|C99]]-Standard das Konzept variabler Array-Größen ein. Bei der Definition eines Feldes kann dessen Größe durch einen beliebigen ganzzahligen Ausdruck bestimmt werden. </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zum klassischen [[Feld (Datentyp)#Standard-Feld|Vektor]], dessen Größe zum Zeitpunkt der Übersetzung festgelegt wird<ins style="font-weight: bold; text-decoration: none;">,</ins>&lt;ref&gt;Kernighan/Ritchie: ''Programmieren in C - Mit dem C-Referenz Manual in deutscher Sprache'', Hanser 1990, 2. Auflage&lt;/ref&gt; führt der [[Varianten der Programmiersprache C#C99|C99]]-Standard das Konzept variabler Array-Größen ein. Bei der Definition eines Feldes kann dessen Größe durch einen beliebigen ganzzahligen Ausdruck bestimmt werden. </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>; Beispiel Vektor und VLA</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>; Beispiel Vektor und VLA</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="c"&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;syntaxhighlight lang="c"&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 38:</td> <td colspan="2" class="diff-lineno">Zeile 38:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs generierten, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Selbstverständlich lassen sich auch mehrdimensionale VLAs generierten, wie das Beispiel aus dem C11-Standard zeigt &lt;code&gt;int a[n][6][m];&lt;/code&gt;&lt;ref name="c11" /&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Auswirkungen ===</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden<del style="font-weight: bold; text-decoration: none;"> </del>&lt;ref name="Jones08" /&gt;<del style="font-weight: bold; text-decoration: none;">.</del> Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden<ins style="font-weight: bold; text-decoration: none;">.</ins>&lt;ref name="Jones08" /&gt; Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> Ajv39 https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=134206559&oldid=prev Ajv39: Tippfehler entfernt 2014-09-20T17:38:36Z <p>Tippfehler entfernt</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 20. September 2014, 19:38 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 6:</td> <td colspan="2" class="diff-lineno">Zeile 6:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>void foo(unsigned int len) { </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>void foo(unsigned int len) { </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> int vector[3] = { 14, 4, 7 }; /* initialisiertes Feld fixer Größe */</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> int vector[3] = { 14, 4, 7 }; /* initialisiertes Feld fixer Größe */</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div> int vla[len]; /* VLA <del style="font-weight: bold; text-decoration: none;">entprechend</del> dem Parameter len */</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div> int vla[len]; /* VLA <ins style="font-weight: bold; text-decoration: none;">entsprechend</ins> dem Parameter len */</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> ...</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div> ...</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. <del style="font-weight: bold; text-decoration: none;">Ocotber</del> 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf der [[Dynamischer Speicher|Halde (Heap)]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/seccode/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 12. August 2014&lt;/ref&gt; </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. <ins style="font-weight: bold; text-decoration: none;">October</ins> 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf der [[Dynamischer Speicher|Halde (Heap)]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/seccode/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 12. August 2014&lt;/ref&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Das folgende Beispiel zeigt eine typische Anwendung von VLAs.</div></td> </tr> </table> Ajv39 https://de.wikipedia.org/w/index.php?title=Variable_Length_Array&diff=133031198&oldid=prev S.Didam: /* Funktionsweise und Anwendung */ tippo 2014-08-13T07:42:35Z <p><span class="autocomment">Funktionsweise und Anwendung: </span> tippo</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="de"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Nächstältere Version</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Version vom 13. August 2014, 09:42 Uhr</td> </tr><tr> <td colspan="2" class="diff-lineno">Zeile 10:</td> <td colspan="2" class="diff-lineno">Zeile 10:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>}</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>&lt;/syntaxhighlight&gt;</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. <del style="font-weight: bold; text-decoration: none;">Darüberhinaus</del> können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)&lt;ref name="c99"&gt;ISO/IEC9899-1999 Programming Languages -- C&lt;/ref&gt;&lt;ref name="c11"&gt;ISO/IEC9899-2011 Programming Languages -- C&lt;/ref&gt; und die Größe nur einmalig bei der Definition festgelegt werden kann. <ins style="font-weight: bold; text-decoration: none;">Darüber hinaus</ins> können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block. </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. Ocotber 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf der [[Dynamischer Speicher|Halde (Heap)]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/seccode/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 12. August 2014&lt;/ref&gt; </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von &lt;code&gt;malloc()&lt;/code&gt; und &lt;code&gt;free()&lt;/code&gt; wegfällt; der Compiler übernimmt die Anforderung und Freigabe des erforderlichen Speichers.&lt;ref&gt;Randy Meyers: ''The New C: Why Variable Length Arrays?'', Dr. Dobb's, 1. Ocotber 2001, Online: http://www.drdobbs.com/the-new-cwhy-variable-length-arrays/184401444 . Abgerufen am 12. August 2014&lt;/ref&gt; Da in der Regel VLAs auf dem [[Stapelspeicher|Stack]] und nicht auf der [[Dynamischer Speicher|Halde (Heap)]] angelegt werden, ist die Speicheranforderung auch erheblich effizienter.&lt;ref name="Jones08"&gt; Derek M. Jones: ''The New C Standard - An Economic and Cultural Commentary'', Addison-Wesley Professional 2008, auch Online: http://www.coding-guidelines.com/cbook/cbook1_2.pdf . Abgerufen am 12. August 2014&lt;/ref&gt; Außerdem kann auf feste Array-Größen, die häufig Ursache für Softwarefehler sind, verzichtet werden.&lt;ref&gt;[https://www.securecoding.cert.org/confluence/display/seccode/VOID+STR35-C.+Do+not+copy+data+from+an+unbounded+source+to+a+fixed-length+array Webseite des CERT Secure Coding Standard STR35-C]. Abgerufen am 12. August 2014&lt;/ref&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>=== Beispiel ===</div></td> </tr> <tr> <td colspan="2" class="diff-lineno">Zeile 40:</td> <td colspan="2" class="diff-lineno">Zeile 40:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden &lt;ref name="Jones08" /&gt;. Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Der Operator &lt;code&gt;sizeof&lt;/code&gt; muss bei VLAs zur Laufzeit ausgewertet werden, d.h. für jedes VLA muss Meta-Information zur Laufzeit generiert werden &lt;ref name="Jones08" /&gt;. Die Definition von VLAs darf nicht übersprungen werden, hier schränken die C-Standards die Benutzung von &lt;code&gt;goto&lt;/code&gt; ein.&lt;ref name="c99" /&gt;&lt;ref name="c11" /&gt; </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Im Gegensatz zu C99 ist die Implementierung von VLAs bei C11-konformen Compilern freigestellt. Die Verfügbarkeit kann über das Define &lt;code&gt;__STDC_NO_VLA__&lt;/code&gt; abgefragt werden, das den Integerwert 1 aufweist, sofern VLAs nicht unterstützt werden.&lt;ref name="c11" /&gt;</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Abgrenzung zu anderen Programmiersprachen ==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>== Abgrenzung zu anderen Programmiersprachen ==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>VLAs sind C-spezifisch und werden nicht vom C++-Standard übernommen. [[C++]] bietet Container-Klassen, die variable Felder ermöglichen. Die Programmiersprachen [[APL (Programmiersprache)|APL]] und [[Perl (Programmiersprache)|Perl]] unterstützen beispielsweise Felder, dessen Größe zur Laufzeit verändert werden können.&lt;ref name="Jones08" /&gt; Arrays in [[Java (Programmiersprache)|Java]] haben eine feste Größe. Da sie dynamisch angelegt werden, können wie bei VLAs die Größen zur Laufzeit festgelegt werden.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>VLAs sind C-spezifisch und werden nicht vom C++-Standard übernommen. [[C++]] bietet Container-Klassen, die variable Felder ermöglichen. Die Programmiersprachen [[APL (Programmiersprache)|APL]] und [[Perl (Programmiersprache)|Perl]] unterstützen beispielsweise Felder, dessen Größe zur Laufzeit verändert werden können.&lt;ref name="Jones08" /&gt; Arrays in [[Java (Programmiersprache)|Java]] haben eine feste Größe. Da sie dynamisch angelegt werden, können wie bei VLAs die Größen zur Laufzeit festgelegt werden.</div></td> </tr> </table> S.Didam