<?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[goto]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich ahbe ein syntaktisches Problem mit goto-Anweisungen. Ich habe gelesen diese werden nur in seltenen Fällen genutzt und daher möchte ich einige gotos in meinem Programm eliminieren.</p>
<p>Hier ein bisschen Pseudo-Code, so dass ihr wisst was ich meine. Habt ihr dafür eine Möglichkeit die gotos zu eliminieren? Danke! <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>
<pre><code class="language-cpp">void function()
{
    void *memory1 = CreateSomeMemory();
    void *memory2 = CreateNextMemory();
    void *memory3 = CreateNextMemory();

    if(&lt;exp&gt;)
    {
        pass1(memory1);
        pass2(memory2);
        pass3(memory3);
        goto Exit;
    }
    else if(&lt;exp&gt;)
    {
        change1(memory1);
        change2(memory2);
        change3(memory3);
        goto Exit;
    }
    Set(&quot;Nothing happened&quot;);
    return;

    Keyword: 
    delete(memory1);
    delete(memory2);
    delete(memory3);
    Set(&quot;Ok, memory was passed&quot;);
    [...] doing some other stuff
    return;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/253291/goto</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 21:44:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253291.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 31 Oct 2009 10:05:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 10:05:27 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich ahbe ein syntaktisches Problem mit goto-Anweisungen. Ich habe gelesen diese werden nur in seltenen Fällen genutzt und daher möchte ich einige gotos in meinem Programm eliminieren.</p>
<p>Hier ein bisschen Pseudo-Code, so dass ihr wisst was ich meine. Habt ihr dafür eine Möglichkeit die gotos zu eliminieren? Danke! <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>
<pre><code class="language-cpp">void function()
{
    void *memory1 = CreateSomeMemory();
    void *memory2 = CreateNextMemory();
    void *memory3 = CreateNextMemory();

    if(&lt;exp&gt;)
    {
        pass1(memory1);
        pass2(memory2);
        pass3(memory3);
        goto Exit;
    }
    else if(&lt;exp&gt;)
    {
        change1(memory1);
        change2(memory2);
        change3(memory3);
        goto Exit;
    }
    Set(&quot;Nothing happened&quot;);
    return;

    Keyword: 
    delete(memory1);
    delete(memory2);
    delete(memory3);
    Set(&quot;Ok, memory was passed&quot;);
    [...] doing some other stuff
    return;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801087</guid><dc:creator><![CDATA[Moerchen]]></dc:creator><pubDate>Sat, 31 Oct 2009 10:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 10:23:26 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization" rel="nofollow">http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization</a><br />
<a href="http://en.wikipedia.org/wiki/Auto_ptr" rel="nofollow">http://en.wikipedia.org/wiki/Auto_ptr</a><br />
<a href="http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/smart_ptr.htm" rel="nofollow">http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/smart_ptr.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801091</guid><dc:creator><![CDATA[schauder]]></dc:creator><pubDate>Sat, 31 Oct 2009 10:23:26 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 11:27:37 GMT]]></title><description><![CDATA[<p>Hi Moerchen,</p>
<p>Vorab:<br />
- &quot;nothing happend&quot; ist falsch: Es wurde Speicher angefordert und nicht wieder freigegeben - höchstwahrscheinlich ein Speicherloch erzeugt.<br />
- Ich vermute, die Sprungmarke soll &quot;Exit&quot; heißen und nicht &quot;Keyword&quot; - und die &lt;exp&gt; sind vermutlich auch unterschiedliche.</p>
<p>neben den richtigen Verweisen von schauder ist das reine &quot;Entfernen der gotos ganz easy:</p>
<pre><code class="language-cpp">void function()
{
    void *memory1 = CreateSomeMemory();
    void *memory2 = CreateNextMemory();
    void *memory3 = CreateNextMemory();

    if(&lt;exp1&gt;)
    {
        pass1(memory1);
        pass2(memory2);
        pass3(memory3);
    }
    else if(&lt;exp2&gt;)
    {
        change1(memory1);
        change2(memory2);
        change3(memory3);
    }
    else {  // &lt;- einfach einen letzten Ast
       Set(&quot;Nothing happened&quot;); 
       return;
    }

    delete(memory1);
    delete(memory2);
    delete(memory3);
    Set(&quot;Ok, memory was passed&quot;);
    [...] doing some other stuff
    return;
}
</code></pre>
<p>Es wäre aber auch guter Stil, erst einmal die &quot;pre condition&quot; zu prüfen und nur dann etwas zu tun:</p>
<pre><code class="language-cpp">void function()
{
    if(!&lt;exp1&gt; &amp;&amp; !&lt;exp2&gt;) {
       Set(&quot;Nothing happened&quot;); 
       return;
    }
    void *memory1 = CreateSomeMemory();
    void *memory2 = CreateNextMemory();
    void *memory3 = CreateNextMemory();

    if(&lt;exp&gt;) {
//...    
    }
    else if(&lt;exp&gt;)    {
//...
    }
    delete(memory1);
    delete(memory2);
    delete(memory3);
    Set(&quot;Ok, memory was passed&quot;);
    [...] doing some other stuff
    return;
}
</code></pre>
<p>(hier wird allerdings tatsächlich im &quot;nothing happend&quot;-Fall kein Speicher angefordert - was mir sehr viel plausibler erscheint.</p>
<p>Das Ganze kann man aber auch noch einfacher/besser/sicherer/wartbarer/.... machen - dazu müsste man aber den konkreten Fall beurteilen.</p>
<p>Weiter solltest Du achten auf:<br />
- Typsicherheitszeug (void? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> - das kann aber auch nur Folge der verkürzten Darstellung sein<br />
- Soll wirklich Speicher nicht mehr freigegeben werden nach Ablauf der Funktion? (im Fall von &quot;exp&quot;)<br />
- Was soll im Fall on fliegenden exceptions passieren? (-&gt; RAII)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801106</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 31 Oct 2009 11:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 12:04:26 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">delete(memory1);
</code></pre>
</blockquote>
<p>So wird das aber nichts. Weil delete so eine spezielle &quot;Funktion&quot; ist, braucht sie deutlich mehr Klammern. Zwei sind ja schon ein guter Anfang, aber 4 sind besser und 6 sind endlich professionell.</p>
<pre><code class="language-cpp">[cpp]    delete(((memory1)));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801119</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 31 Oct 2009 12:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 12:07:21 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">delete(memory1);
</code></pre>
</blockquote>
<p>So wird das aber nichts. Weil delete so eine spezielle &quot;Funktion&quot; ist, braucht sie deutlich mehr Klammern. Zwei sind ja schon ein guter Anfang, aber 4 sind besser und 6 sind endlich professionell.</p>
<pre><code class="language-cpp">[cpp]    delete(((memory1)));
</code></pre>
</blockquote>
<p>das ist doch bloß pseudocode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801121</guid><dc:creator><![CDATA[merker++]]></dc:creator><pubDate>Sat, 31 Oct 2009 12:07:21 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 13:18:54 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">delete(memory1);
</code></pre>
</blockquote>
<p>So wird das aber nichts. ...</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>merker++ schrieb:</p>
<blockquote>
<p>...das ist doch bloß pseudocode.</p>
</blockquote>
<p>... und zudem noch kopiert.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: Wenn Dir sonst nicht mehr aufgefallen ist, bin ich ein wenig enttäuscht von Dir.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801149</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 31 Oct 2009 13:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 13:45:36 GMT]]></title><description><![CDATA[<p>ist das ein guter ansatz?</p>
<p>ansatz:</p>
<pre><code class="language-cpp">#define INTEGER 1

class Pointer
{
	void* cameleon;
public:
	Pointer ( int type, unsigned quantity )
	{
		switch(type)
		{
			case INTEGER:
				cameleon = new int [quantity];
				cout &lt;&lt; &quot;Created&quot; &lt;&lt; endl;
			break;
		}

	}
	~Pointer()
	{
		cout &lt;&lt; &quot;Destroyed&quot; &lt;&lt; endl;
		delete [] cameleon;
	}

};

int main() 
{ 
 	Pointer pt(INTEGER, 10);   
	return 0; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801160</guid><dc:creator><![CDATA[pointer n00b]]></dc:creator><pubDate>Sat, 31 Oct 2009 13:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 16:15:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">delete(((memory1)));
</code></pre>
<p>Hi! Danke für eure Antworten <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="🙂"
    /><br />
Bzgl der oben zitierten delete Anweisung.. Warum brauche ich denn mehrere Klammern? Einfach nur als Konvention oder hat das auch einen technischen Hintergrund?</p>
<p>Danke euch <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/1801250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801250</guid><dc:creator><![CDATA[Moerchen]]></dc:creator><pubDate>Sat, 31 Oct 2009 16:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 16:19:22 GMT]]></title><description><![CDATA[<p>Moerchen schrieb:</p>
<blockquote>
<p>Bzgl der oben zitierten delete Anweisung.. Warum brauche ich denn mehrere Klammern? Einfach nur als Konvention oder hat das auch einen technischen Hintergrund?</p>
</blockquote>
<p>Die sind nötig, damit dein Programm genügend Ironie enthält.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801252</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 31 Oct 2009 16:19:22 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 16:20:30 GMT]]></title><description><![CDATA[<p>Moerchen schrieb:</p>
<blockquote>
<p>Bzgl der oben zitierten delete Anweisung.. Warum brauche ich denn mehrere Klammern? Einfach nur als Konvention oder hat das auch einen technischen Hintergrund?</p>
</blockquote>
<p>das ist moderator-scherzkeksologie.<br />
mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801253</guid><dc:creator><![CDATA[klammern n00b]]></dc:creator><pubDate>Sat, 31 Oct 2009 16:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 17:27:25 GMT]]></title><description><![CDATA[<p>Moerchen schrieb:</p>
<blockquote>
<p>Hi! Danke für eure Antworten <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="🙂"
    /><br />
Bzgl der oben zitierten delete Anweisung.. Warum brauche ich denn mehrere Klammern? Einfach nur als Konvention oder hat das auch einen technischen Hintergrund?</p>
</blockquote>
<p>volkard, siehst du, was du mit deinem Sarkasmus anrichtest? <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>Um das klarzustellen: Folgendes ist völlig ausreichend; Klammern sind in diesem Zusammenhang redundant.</p>
<pre><code class="language-cpp">delete memory1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801286</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 31 Oct 2009 17:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 17:36:59 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /> Alles klar, ich habe mich schon gewundert ich habe etwas nicht mitbekommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":-D"
      alt="😃"
    /> Ich hatte daher eher nicht an einen technischen, aber einen syntaktischen Hintergrund erwartet.</p>
<p>Ich nehme einfach 9 Klammern :-D.</p>
<p>Danke für eure Hilfe <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1801291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801291</guid><dc:creator><![CDATA[Moerchen]]></dc:creator><pubDate>Sat, 31 Oct 2009 17:36:59 GMT</pubDate></item><item><title><![CDATA[Reply to goto on Sat, 31 Oct 2009 17:40:14 GMT]]></title><description><![CDATA[<p>Moerchen schrieb:</p>
<blockquote>
<p>Ich nehme einfach 9 Klammern :-D.</p>
</blockquote>
<p><code>delete((((mem1))))/*)*/;</code><br />
^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801293</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 31 Oct 2009 17:40:14 GMT</pubDate></item></channel></rss>