<?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[SubProcedures in C++&#x2F;G++?]]></title><description><![CDATA[<p>Hallo,</p>
<p>kennt C++ echte Subfunctions / procedures, die auch im Kontext der Funktion laufen, in der die deklariert wurden?<br />
Wenn ja, wie ist die richtige Deklaration?</p>
<pre><code>void test()
{
  int a;

  void test2() {
   a++;
  }

  test();
}
</code></pre>
<p>Danke und Gruß<br />
NewBee</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/286774/subprocedures-in-c-g</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 17:29:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/286774.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 May 2011 12:01:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:01:25 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kennt C++ echte Subfunctions / procedures, die auch im Kontext der Funktion laufen, in der die deklariert wurden?<br />
Wenn ja, wie ist die richtige Deklaration?</p>
<pre><code>void test()
{
  int a;

  void test2() {
   a++;
  }

  test();
}
</code></pre>
<p>Danke und Gruß<br />
NewBee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064006</guid><dc:creator><![CDATA[NewBee2]]></dc:creator><pubDate>Mon, 16 May 2011 12:01:25 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:05:41 GMT]]></title><description><![CDATA[<p>Nein, kennt es nicht. Aber Du kannst Funktoren dafür benutzen:</p>
<pre><code class="language-cpp">int main()
{
    struct
    {
        void operator()(int a)
        {
            std::cout &lt;&lt; a &lt;&lt; '\n';
        }
    } sub;

    sub(10);
}
</code></pre>
<p>Achso: Die sehen den umgebenen Scope allerdings nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064010</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 16 May 2011 12:05:41 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:05:36 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Funktionen dürfen nicht innerhalb andere Funktionen deklariert werden.<br />
Du kannst aber Klasse bzw. Strukturen innerhalb von Funktionen deklarieren. Die können dann natürlich Memberfunktionen haben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064011</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 16 May 2011 12:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:06:13 GMT]]></title><description><![CDATA[<blockquote>
<p>kennt C++ echte Subfunctions / procedures, die auch im Kontext der Funktion laufen, in der die deklariert wurden?<br />
Wenn ja, wie ist die richtige Deklaration?</p>
</blockquote>
<p>Nein. C++ kennst keine Funktionen, die lokal in einer Funktion definiert / aufgerufen werden können. Man kann das Verhalten aber durch eine Funktion in einer lokal (in der Funktion) definierten Klasse erreichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064012</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 16 May 2011 12:06:13 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:09:01 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Nein, kennt es nicht. Aber Du kannst Funktoren dafür benutzen:</p>
<pre><code class="language-cpp">int main()
{
    struct
    {
        void operator()(int a)
        {
            std::cout &lt;&lt; a &lt;&lt; '\n';
        }
    } sub;
    
    sub(10);
}
</code></pre>
</blockquote>
<p>Static ist wichtiger.</p>
<pre><code class="language-cpp">void test() {
  int a;

  struct foo {
    static void test2() {
       a++;//klappt aber nicht. 
    }
  }

  foo::test2();
}
</code></pre>
<p>Das war nicht gefragt. Gefragt war, daß die sub ohne Übergabe von a magischerweise a schon kennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064016</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 16 May 2011 12:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:10:01 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Funktionen dürfen nicht innerhalb andere Funktionen deklariert werden.</p>
</blockquote>
<p>Deklariert schon, definiert nicht. Zur Deklaration bedenke das hin und wieder auftauchende Problem der Funktions-Deklaration, die eigentlich ein Default-Ctor-Aufruf sein sollte:</p>
<pre><code class="language-cpp">class Foo
{
public: 
  Foo();
};

/* ... */
int main()
{
  Foo f(); //Deklariert eie Funktion f, die ein Foo liefert.
  Foo f2; //Deklariert&amp;Definiert eine Foo-Variable f2, die default-initialisiert wird.
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064018</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 16 May 2011 12:10:01 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:11:47 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p>Hallo,<br />
Funktionen dürfen nicht innerhalb andere Funktionen deklariert werden.</p>
</blockquote>
<p>Doch, irgendwie schon.</p>
<pre><code class="language-cpp">#include &lt;string&gt;
int main(){
   std::string h(&quot;hallo&quot;);
   std::string w(&quot;welt&quot;);
   std::string p();//patsch
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064020</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 16 May 2011 12:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:19:08 GMT]]></title><description><![CDATA[<p>Ich weiße mal obligatorisch auf Lambdas in C++0x hin.</p>
<pre><code class="language-cpp">void test()
{
  int a;

  auto test2 = [&amp;]() {
   a++;
  };

  test2();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064024</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 16 May 2011 12:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:25:30 GMT]]></title><description><![CDATA[<p>Danke für die Antworten!</p>
<p>Gruß<br />
NewBee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064030</guid><dc:creator><![CDATA[NewBee2]]></dc:creator><pubDate>Mon, 16 May 2011 12:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:30:57 GMT]]></title><description><![CDATA[<p>Ok, Ihr habt ja alle recht.<br />
Ich ziehe hiermit das deklariert zurück und ersetze es durch definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064033</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 16 May 2011 12:30:57 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 12:33:00 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Static ist wichtiger.</p>
</blockquote>
<p>Wieso?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064034</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 16 May 2011 12:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 13:04:40 GMT]]></title><description><![CDATA[<p>btw, was C++0x mit lambda's anbietet, lässt sich auch mit Funktoren nachstellen...<br />
sieht nur nicht so stylisch aus :p</p>
<pre><code class="language-cpp">void foo(void)
{
    int a = 0;

    struct functor
    {
        int&amp; a;

        functor(int &amp; A) : a(A) {}

        void operator () (void)
        {
            ++a;
        }
    } bar(a);

    bar();
}
</code></pre>
<p>-&gt; ungetestet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
<p>wenn die subroutine keine Kenntnis vom äußeren scope braucht,<br />
kann man auch direkt den Konstruktor misbrauchen</p>
<pre><code class="language-cpp">void foo(void)
{
    int a = 0;

    struct functor
    {
        functor(int &amp; a)
        {
            ++a;
        }
    };

    // hier würde ein temporäres functor-Objekt erstellt, was verworfen wird,
    // da es keiner Variablen zugewiesen wird
    // übrig bleibt eine einfach Funktion...
    // bleibt nur offen, in wiefern hier der compiler optimiert
    // aber da der functor keine Attribute hat, dürfte es eig keine Speicher-Overhead geben.
    functor(a);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2064060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064060</guid><dc:creator><![CDATA[DrakoXP]]></dc:creator><pubDate>Mon, 16 May 2011 13:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Mon, 16 May 2011 16:16:17 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Wieso?</p>
</blockquote>
<p>Member ohne Instanz ausführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064161</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Mon, 16 May 2011 16:16:17 GMT</pubDate></item><item><title><![CDATA[Reply to SubProcedures in C++&#x2F;G++? on Tue, 17 May 2011 16:19:52 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int test()
{
  int a = 0;

  auto test2 = [&amp;]()
  {
    ++a;
  }

  test2();
  cout &lt;&lt; a;
}
</code></pre>
<p>C++0x rockt mal wieder die Bude. Zumindestens wenn dein Compiler schon ein bischen kann <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>Edit: Upps, ich sollte keine Seiten mehrere Minuten offen lassen und dann erst schreiben ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2064789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2064789</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Tue, 17 May 2011 16:19:52 GMT</pubDate></item></channel></rss>