<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Schleifen - Wieso keine Sicherheit?]]></title><description><![CDATA[<pre><code class="language-cpp">for ( short int i = 0; i &lt;= 32767; i++) 
     std::cout &lt;&lt; i &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Wieso setzt C++ am Ende des Schleifenkörpers nicht einfach ein conditional jump, der bei overflow-flag ausgeführt wird? Es wurde in C++ doch einige Sachen extra &quot;sicherer&quot; gemacht, zB strings nicht mehr anfällig für overflows's ... wieso wurde diese kleine Sache nicht implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301208/schleifen-wieso-keine-sicherheit</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 02:59:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301208.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 21 Mar 2012 21:20:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 21:20:34 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">for ( short int i = 0; i &lt;= 32767; i++) 
     std::cout &lt;&lt; i &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Wieso setzt C++ am Ende des Schleifenkörpers nicht einfach ein conditional jump, der bei overflow-flag ausgeführt wird? Es wurde in C++ doch einige Sachen extra &quot;sicherer&quot; gemacht, zB strings nicht mehr anfällig für overflows's ... wieso wurde diese kleine Sache nicht implementiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193867</guid><dc:creator><![CDATA[cvcv]]></dc:creator><pubDate>Wed, 21 Mar 2012 21:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 21:26:07 GMT]]></title><description><![CDATA[<p>Der Standard kennt CPU-Flags nicht. Woher soll der Compiler zudem wissen, dass du in diesem Fall bei einem Overflow einen Abbruch haben willst? Wie würde ich dann ausdrücken, dass ich keinen Abbruch haben will?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193869</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 21 Mar 2012 21:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 21:31:10 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Der Standard kennt CPU-Flags nicht. Woher soll der Compiler zudem wissen, dass du in diesem Fall bei einem Overflow einen Abbruch haben willst? Wie würde ich dann ausdrücken, dass ich keinen Abbruch haben will?</p>
</blockquote>
<p>Hm, klingt für mich wie die einzig sinnvolle Reaktion darauf. Wenn man absichtlich ein Overflow provoziert ( wieso sollte man ? ), kann man am Ende doch immernoch mit Inline-Assembler darauf reagieren, oder sehe ich das falsch?</p>
<p>Der Standard kennt CPU-Flags nicht -&gt; Wie sind dann Bedingungen umgesetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193871</guid><dc:creator><![CDATA[cvcv]]></dc:creator><pubDate>Wed, 21 Mar 2012 21:31:10 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 22:20:12 GMT]]></title><description><![CDATA[<p>EDIT: uff, zu langsam. Das folgende &quot;Genau&quot; bezieht sich auf den Beitrag von Michael E. /EDIT</p>
<p>Genau.</p>
<p>Die for-Schleift wird zwar sehr sehr oft genau so verwendet, ist aber grundsätzlich ein ganz generisches Konstrukt. Da muss es keine Schleifenvariable geben, keinen grösser(-gleich)/kleiner(-gleich) etc.</p>
<p>Man müsste dazu also entweder die for-Syntax noch weiter aufbohren, oder sonst irgendwelche gröberen Änderungen an der Sprache machen. Und das steht wohl einfach nicht dafür.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193873</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:20:12 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 21:44:39 GMT]]></title><description><![CDATA[<p>Das Problem tritt ja auch nicht erst zur Laufzeit auf, sondern kann schon beim Kompilieren erkannt werden. Ein vernünftiger Compiler mit vernünftigen Flags sagt zu dem Code sowas wie:</p>
<blockquote>
<p>warning: comparison is always true due to limited range of data type</p>
</blockquote>
<p>Warum also sollte er noch extra zusätzlichen Binärcode erzeugen, um solche Programmierfehler zur Laufzeit abzufangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193878</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Wed, 21 Mar 2012 21:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 21:45:23 GMT]]></title><description><![CDATA[<p>Was der Compiler machen könnte, wäre warnen, dass die Bedingung der for-Schleife immer true ergibt. Allerdings müsste er das dafür erst mal merken, was nach VS11 Assembly nicht der Fall ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193879</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 21 Mar 2012 21:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 22:25:53 GMT]]></title><description><![CDATA[<p>Ohne diese Vermutung belegen zu können, vermute ich einfach mal, dass die Möglichkeit eines overflows absolut erwünscht ist. Die for-Schleife in C/C++ unterscheidet sich von den Schleifen anderer Computersprachen ja auch darin, dass man den &quot;Zähler&quot; nicht nur stur zählen lassen, sondern so ziemlich alles damit machen kann (z.B. +1,-2,+3,-4,..., oder Fibonacci 0,1,1,2,3,5,8,...). Unter dem Gesichtspunkt gibt es keinen Grund, warum ich beschränkt werden soll, wenn ich +32766,+32767,-32768,... zählen möchte (der umgekehrte Effekt war früher bei Spielern von schlecht programmierten Spielen sehr erwünscht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).</p>
<p>Anderer Erklärungsversuch:<br />
Im Gegensatz zu Strings, welche &quot;Datenspeicher&quot; sind, handelt es sich bei der for-Schleife um eine Kontrollstruktur. Als Programmierer weißt du zur Entwurfszeit nicht, welche Daten in deinem String landen, daher muss der String gegen jeden Blödsinn abgesichert werden, die ein Benutzer damit anstellen kann.<br />
Die for-Schleife dagegen kontrolliert DEINEN Programmfluss. Du bist der Programmier, ergo entscheidest du was und wie oft das Programm machen soll. Auch wenn die Abbruchbedingung der Schleife aus einer Benutzereingabe stammen sollte, so verfügst lediglich du über das Wissen, warum nur eine Höchstzahl an Schleifendurchläufen möglich sein soll (in deinem Bsp. ist der Zähler nur ein short, kein int. Das kann der Benutzer nicht wissen, muss also vorher abgefangen werden).</p>
<p>Ich gebe dir allerdings recht, dass zumindest der Compiler für solche offensichtliche Fehler wie den hier</p>
<pre><code>for(short i=0; i&lt;100000; ++i){}
</code></pre>
<p>eine Warnung ausspucken sollte (hat mein g++ 4.6.1 selbst mit -Wall -pedantic nicht gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ). Dass die Abbruchbedingung hier nicht erreicht werden kann ist offensichtlich - trotzdem kein Grund overflows komplett zu verbieten. Das hier funktioniert nämlich:</p>
<pre><code>for(short i=32000; i&lt;-32000 || i&gt;0; ++i){}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2193892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193892</guid><dc:creator><![CDATA[(gast)]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 22:27:46 GMT]]></title><description><![CDATA[<p>Ja, eine Warning wäre gut.<br />
Ich wundere mich auch gerade sehr dass keine kommt, aber nachdem ich es gerade selbst probiert habe (mit MSVC) muss ich es wohl glauben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193893</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:27:46 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 22:29:51 GMT]]></title><description><![CDATA[<p>(gast) schrieb:</p>
<blockquote>
<p>Unter dem Gesichtspunkt gibt es keinen Grund, warum ich beschränkt werden soll, wenn ich +32766,+32767,-32768,... zählen möchte</p>
</blockquote>
<p>Overflow von signed Typen ist UB.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193894</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193894</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 22:36:12 GMT]]></title><description><![CDATA[<p>cvcv schrieb:</p>
<blockquote>
<p>Der Standard kennt CPU-Flags nicht -&gt; Wie sind dann Bedingungen umgesetzt?</p>
</blockquote>
<p>Du darfst dir das nicht so vorstellen, dass der C++-Standard sagt, in welche Assembler-Instruktionen ein C++-Code übersetzt werden soll, sondern die Sprache läuft quasi auf einer abstrakten Maschine. Und so sagt der Standard dann auch nur, dass je nach Auswertung der Bedingung des ifs unterschiedlicher Code ausgeführt wird. Wie das zu bewerkstelligen ist, wird dabei offen gelassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193897</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:36:12 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 22:52:12 GMT]]></title><description><![CDATA[<p>Das erzeugt nicht auf allen Maschinen einen Overflow - es gibt auf der Welt nicht nur x86 und x86-64, wo sich short == 16 Bit eingebürgert hat. Unter UNICOS (das findet man auf Crays) ist short üblicherweise ganze 64 Bit breit (d.h. sizeof(short) == sizeof(int) == sizeof(long)), und da passt 32768 locker rein.</p>
<p>Ich wüsste auch nicht zu sagen, ob alle CPUs Overflow flaggen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193906</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 21 Mar 2012 22:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 23:06:37 GMT]]></title><description><![CDATA[<p>(gast) schrieb:</p>
<blockquote>
<p>Ich gebe dir allerdings recht, dass zumindest der Compiler für solche offensichtliche Fehler wie den hier</p>
<pre><code>for(short i=0; i&lt;100000; ++i){}
</code></pre>
<p>eine Warnung ausspucken sollte (hat mein g++ 4.6.1 selbst mit -Wall -pedantic nicht gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ).</p>
</blockquote>
<p>Solche Sachen mahnt der GCC normalerweise erst ab Wextra an (Tut er in diesem Fall auch wirklich!). Wall ist eher für Sachen, die wirkliche Laufzeitfehler ergeben. Dieses hier ist bloß eine ungewöhnliche Programmierstruktur mit genau definiertem Verhalten, welches auch keinen Fehler hervorruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193914</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Mar 2012 23:06:37 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 23:09:39 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Dieses hier ist bloß eine ungewöhnliche Programmierstruktur mit genau definiertem Verhalten, welches auch keinen Fehler hervorruft.</p>
</blockquote>
<p>Eigentlich handelt es sich hier um Undefined Behaviour. Das müsste in <a href="http://blog.regehr.org/archives/161" rel="nofollow">http://blog.regehr.org/archives/161</a> stehen. Schlag mich, wenns nicht so ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193916</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 21 Mar 2012 23:09:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 23:37:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Okay, überredet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Irgendwie muss man ja auch absichtliche &quot;Endlos&quot;-Schleifen programmieren können<br />
Sachen wie</p>
<pre><code>while(1!=2){
    ...
    if(condition){break;}
}
</code></pre>
<p>sind ja weit verbreitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193927</guid><dc:creator><![CDATA[(gast)]]></dc:creator><pubDate>Wed, 21 Mar 2012 23:37:27 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 23:41:05 GMT]]></title><description><![CDATA[<p>(gast) schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Okay, überredet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Irgendwie muss man ja auch absichtliche &quot;Endlos&quot;-Schleifen programmieren können<br />
Sachen wie</p>
<pre><code>while(1!=2){
    ...
    if(condition){break;}
}
</code></pre>
<p>sind ja weit verbreitet.</p>
</blockquote>
<p>Äh, <code>while (true)</code> oder einfach <code>for (;;)</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193929</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Wed, 21 Mar 2012 23:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Wed, 21 Mar 2012 23:54:14 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Dieses hier ist bloß eine ungewöhnliche Programmierstruktur mit genau definiertem Verhalten, welches auch keinen Fehler hervorruft.</p>
</blockquote>
<p>Eigentlich handelt es sich hier um Undefined Behaviour. Das müsste in <a href="http://blog.regehr.org/archives/161" rel="nofollow">http://blog.regehr.org/archives/161</a> stehen. Schlag mich, wenns nicht so ist.</p>
</blockquote>
<p>Woah! Das ist aber mal eine obskure Klausel! Ich erinnere mich zwar da dran, diese mal gelesen zu haben, aber an diese Konsequenzen hätte ich nie gedacht. Das hat ja richtig weitreichende Folgen für die Standardkonformität harmloser Programme!<br />
Dann lass uns vielleicht lieber annehmen, dass das Programm gutes altes C89 ist mit definiertem Überlaufverhalten und ohne Klauseln über das Verhalten von Schleifen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193933</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 21 Mar 2012 23:54:14 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 00:02:01 GMT]]></title><description><![CDATA[<p>Noch ne kleine Anmerkung: In C++11 ist dieses Verhalten explizit nicht mehr auf Schleifen begrenzt, sondern gilt beispielsweise auch bei endlosen rekursiven Aufrufen. Hab die entsprechende Stelle aber gerade nicht zur Hand.</p>
<p>Edit: §1.10.24:</p>
<blockquote>
<p>The implementation may assume that any thread will eventually do one of the following:<br />
—terminate,<br />
—make a call to a library I/O function,<br />
—access or modify a volatile object, or<br />
—perform a synchronization operation or an atomic operation.<br />
[Note:This is intended to allow compiler transformations such as removal of empty loops, even when<br />
termination cannot be proven. —end note]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2193938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193938</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:02:01 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 00:18:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20068">@Michael</a> E.<br />
Ja, die ganze Geschichte mit &quot;Programm/Funktion das nicht terminiert =&gt; UB =&gt; Compiler dürfen ganz wild Dinge wegoptimieren&quot; hat ja durchaus für einige Diskussionen gesorgt.<br />
Das Argument des &quot;pro&quot; Lagers war dabei immer dass das bestimmte Optimierungen erlaubt die sonst nicht möglich wären.</p>
<p>Was mich aber interessieren würde: gibt es da ein gutes Beispiel für eine Optimierung, die ohne diese Regel nicht möglich wäre, und wo auch etwas sinnvolles dabei rauskommt?</p>
<p>Ich kann mir nämlich vorstellen dass bestimmte Optimierungen dadurch vielleicht einfacher werden, aber mir fällt nix ein wo es ohne diese Regel wirklich nicht möglich wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193942</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:18:20 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 00:42:34 GMT]]></title><description><![CDATA[<p>Die leere Endlosschleife wird schneller ausgeführt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> .</p>
<p>Um etwas sinnvoller zu werden: Gegeben ein Programmteil</p>
<pre><code class="language-cpp">unsigned N;
cin &gt;&gt; N;
unsigned counter = 0;
for (unsigned short i = 0; i &lt; N; ++i)
 ++counter;
// N im Folgenden nicht mehr benutzt.
</code></pre>
<p>Könnte komplett durch</p>
<pre><code class="language-cpp">unsigned counter;
cin &gt;&gt; counter;
</code></pre>
<p>ersetzt werden, wenn man weiß, dass die Schleife terminiert.</p>
<p>Solche Fälle sollten sich leicht mehr (und sinnvoller) konstruieren lassen, wenn das Ergebnis einer Schleife für den Compiler berechenbar von den Kontrollvariablen abhängt (gar nicht so selten!), aber in einigen Ausnahmefällen die Schleife gar nicht abbrechen würde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193949</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:42:34 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 00:37:56 GMT]]></title><description><![CDATA[<p>Wenn die Eingabe fehlschlägt, enthält die Variable einen undefinierten Wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193952</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:37:56 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 00:39:32 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wenn die Eingabe fehlschlägt, enthält die Variable einen undefinierten Wert.</p>
</blockquote>
<p>War vorher auch so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193953</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 00:43:27 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wenn die Eingabe fehlschlägt, enthält die Variable einen undefinierten Wert.</p>
</blockquote>
<p>Für mich kam bisher ein Blockierskript für einzelne User nicht infrage. Wenn du jetzt allerdings jeden Beitrag von SeppJ kommentieren willst, weil du Unrecht hattest und das nicht einsehen willst, wanke ich sehr in meiner Haltung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193955</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Thu, 22 Mar 2012 00:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 01:22:06 GMT]]></title><description><![CDATA[<p>Ich hatte nicht Unrecht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193958</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 22 Mar 2012 01:22:06 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 08:35:52 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ich kann mir nämlich vorstellen dass bestimmte Optimierungen dadurch vielleicht einfacher werden, aber mir fällt nix ein wo es ohne diese Regel wirklich nicht möglich wäre.</p>
</blockquote>
<p>Es ist einfacher, ein Programm auf Seiteneffekte zu testen, als auf Terminierung. Wenn der Compiler ersteres aber beweisen kann, darf er den entsprechenden Code eventuell trotzdem nicht wegoptimieren, wenn er Terminierung nicht zeigen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194000</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 22 Mar 2012 08:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 10:16:57 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Was mich aber interessieren würde: gibt es da ein gutes Beispiel für eine Optimierung, die ohne diese Regel nicht möglich wäre, und wo auch etwas sinnvolles dabei rauskommt?</p>
</blockquote>
<p>Ich hätte da eher eine andere Frage: Gibt es überhaupt sinnvolle Schleifen, welche in diese Kategorie fallen? Das Ganze scheint mir ein etwas theoretisches Konstrukt zu sein.</p>
<p>Ich zweifle daher an diesen &quot;weitreichenden Folgen&quot;, wie es SeppJ gesagt hat.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194057</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 22 Mar 2012 10:16:57 GMT</pubDate></item><item><title><![CDATA[Reply to Schleifen - Wieso keine Sicherheit? on Thu, 22 Mar 2012 10:18:25 GMT]]></title><description><![CDATA[<p>(gast) schrieb:</p>
<blockquote>
<p>eine Warnung ausspucken sollte (hat mein g++ 4.6.1 selbst mit -Wall -pedantic nicht gemacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ). Dass die Abbruchbedingung hier nicht erreicht werden kann ist offensichtlich - trotzdem kein Grund overflows komplett zu verbieten. Das hier funktioniert nämlich:</p>
<pre><code>for(short i=32000; i&lt;-32000 || i&gt;0; ++i){}
</code></pre>
</blockquote>
<p>-Wextra ist gefragt.</p>
<blockquote>
<p>ethon@fleck:~$ gcc -Wall -Wextra test.cpp<br />
test.cpp: In Funktion »int main()«:<br />
test.cpp:10:22: Warnung: Vergleich ist durch beschränkten Wertebereich des Datentyps stets »wahr« [-Wtype-limits]</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2194060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194060</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 22 Mar 2012 10:18:25 GMT</pubDate></item></channel></rss>