<?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[Startparameter verarbeitung]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich wollte mal fragen ob es eigentlich so etwas wie eine schöne,<br />
saubere &quot;standard&quot; Routine gibt um Startparameter zu verarbeiten.</p>
<p>Viele Textbasierte programme kann man ja auch nur so (mit Parametern)<br />
nutzen. Diese muss man meist so (zB) übergeben:</p>
<pre><code class="language-cpp">prog.exe -a param1 -b param2 -c param3
</code></pre>
<p>Wie wird das dann verarbeitet? Prinzipiell bekommt man doch erstmal<br />
nur Strings mit den Inhalten:<br />
argv[0] = c:\prog.exe<br />
argv[1] = -a<br />
argv[2] = param1<br />
argv[3] = -b<br />
...</p>
<p>Die einzige Methode die mir jetzt einfallen würde wäre alle argumente<br />
durchzutesten.. (ca so)</p>
<pre><code class="language-cpp">for(int i = 1; i &lt; argc; i++)
   {
      if(argv[i][0] == '-')
      {
         switch(argv[i][1])
         {
            case 'a':
               cout &lt;&lt; argv[i + 1] &lt;&lt; endl;
               break;
            default:
               cout &lt;&lt; &quot;Unkown argument&quot; &lt;&lt; endl;
               break;
         }
      }
   }
</code></pre>
<p>Bin mir aber nicht sicher ob das so auch elegant ist..</p>
<p>Besten Dank jetzt schonmal für eure Antworten <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="😉"
    /> (Voraus .. und NICHT vorraus.. was man hier im Forum so alles lernt^^)</p>
<p>(Ach ja, die Antwort muss jetzt nicht umbedingt irgendwas mit C++ zu tun haben, C würde mir völlig reichen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/273458/startparameter-verarbeitung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 05:56:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/273458.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Sep 2010 15:44:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 15:44:38 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich wollte mal fragen ob es eigentlich so etwas wie eine schöne,<br />
saubere &quot;standard&quot; Routine gibt um Startparameter zu verarbeiten.</p>
<p>Viele Textbasierte programme kann man ja auch nur so (mit Parametern)<br />
nutzen. Diese muss man meist so (zB) übergeben:</p>
<pre><code class="language-cpp">prog.exe -a param1 -b param2 -c param3
</code></pre>
<p>Wie wird das dann verarbeitet? Prinzipiell bekommt man doch erstmal<br />
nur Strings mit den Inhalten:<br />
argv[0] = c:\prog.exe<br />
argv[1] = -a<br />
argv[2] = param1<br />
argv[3] = -b<br />
...</p>
<p>Die einzige Methode die mir jetzt einfallen würde wäre alle argumente<br />
durchzutesten.. (ca so)</p>
<pre><code class="language-cpp">for(int i = 1; i &lt; argc; i++)
   {
      if(argv[i][0] == '-')
      {
         switch(argv[i][1])
         {
            case 'a':
               cout &lt;&lt; argv[i + 1] &lt;&lt; endl;
               break;
            default:
               cout &lt;&lt; &quot;Unkown argument&quot; &lt;&lt; endl;
               break;
         }
      }
   }
</code></pre>
<p>Bin mir aber nicht sicher ob das so auch elegant ist..</p>
<p>Besten Dank jetzt schonmal für eure Antworten <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="😉"
    /> (Voraus .. und NICHT vorraus.. was man hier im Forum so alles lernt^^)</p>
<p>(Ach ja, die Antwort muss jetzt nicht umbedingt irgendwas mit C++ zu tun haben, C würde mir völlig reichen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949345</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949345</guid><dc:creator><![CDATA[weißnochnix]]></dc:creator><pubDate>Tue, 07 Sep 2010 15:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 15:51:16 GMT]]></title><description><![CDATA[<p>Wenn du assoziative Container wie <code>std::map</code> nutzt, kannst du <code>const char*</code> auf irgendwas abbilden. Falls sich die Aktionen je nach Argument stark unterscheiden, kann der Wert-Typ auch ein Funktionszeiger (oder sogar <code>std::tr1::function</code> ) sein.</p>
<p>Falls das Overkill ist, nimm <code>if</code> - <code>else</code> . Aber sicher kein zeichenweises <code>switch</code> , das artet aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949351</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Sep 2010 15:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 16:07:23 GMT]]></title><description><![CDATA[<p>Für komplexere Kommandozeilen-Optionen empfiehlt sich Boost, bzw. eine Bibliothek daraus:<br />
<a href="http://www.boost.org/doc/libs/1_44_0/doc/html/program_options.html" rel="nofollow">http://www.boost.org/doc/libs/1_44_0/doc/html/program_options.html</a></p>
<p>Für kleineres würde ich aber auch zur Methode von Nexus raten.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949360</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 07 Sep 2010 16:07:23 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 16:23:09 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten! Auch wenn boost auf den ersten<br />
Blick leichter aussieht (habe noch nicht so viel Erfahrung mit C++)<br />
werde ich wahrscheinlic die &quot;map&quot; Lösung verwenden.</p>
<p>Interessieren würde mich noch wie man das ganze in reinem C realisieren<br />
würde, vielleicht weiß das hier ja jemand (auch wenns das C++ Forum ist ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949366</guid><dc:creator><![CDATA[weißnochnix]]></dc:creator><pubDate>Tue, 07 Sep 2010 16:23:09 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 16:28:59 GMT]]></title><description><![CDATA[<p>So ohne externe Bibliothek wäre es wohl am einfachsten mit <code>if</code> - <code>else</code> . Du kannst dir zwar eine kleine Map (evtl. linear als sortiertes Array) nachbauen, aber die Vorteile zahlen sich nicht aus bei wenigen Optionen. Du musst auch bedenken, dass dazu wieder Speicheranforderungen etc. nötig sind. Und erst der Implementierungsaufwand... <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/1949368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949368</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Sep 2010 16:28:59 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 16:34:29 GMT]]></title><description><![CDATA[<p>Für reines C gibt es auch hübsche fertige Bibliotheken, zum Beispiel <a href="http://www.gnu.org/s/libc/manual/html_node/Getopt.html" rel="nofollow">GNU getopt</a> und <a href="http://www.gnu.org/s/libc/manual/html_node/Parsing-Program-Arguments.html#Parsing-Program-Arguments" rel="nofollow">andere</a>. Dieses dient dazu, Kommandozeilen im GNU-Stil zu parsen. Sehr ausgereift und sehr weit verbreitet (logischerweise im ganzen GNU-Projekt <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>Prinzipiell kannst du natürlich angucken, wie diese funktionieren, da quelloffen. Oder besser noch, gleich benutzen anstatt selber machen, sofern die GPL für dein Projekt in Frage kommt (nur ein potentielles Problem bei kommerzieller Software).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949371</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 07 Sep 2010 16:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 16:56:11 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Oder besser noch, gleich benutzen anstatt selber machen, sofern die GPL für dein Projekt in Frage kommt (nur ein potentielles Problem bei kommerzieller Software).</p>
</blockquote>
<p>Das ist auch sonst ein Problem, wenn man sein eigenes Projekt nicht ebenfalls unter der GPL lizenzieren möchte. Was ich übrigens durchaus verstehen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949385</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Sep 2010 16:56:11 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 18:48:45 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">typedef function&lt;int(char*)&gt; func_f;
/* ... */
map&lt;char,func_f&gt; test;
</code></pre>
<p>Und wie führt man dann eine Funktion aus?^^<br />
Ich hoffe die Frage scheint jetzt nicht allzu dumm,<br />
bin wie gesagt unter C++ noch ein ziemlicher Neuling <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/1949416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949416</guid><dc:creator><![CDATA[weißnochnix]]></dc:creator><pubDate>Tue, 07 Sep 2010 18:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 18:51:27 GMT]]></title><description><![CDATA[<p>Mit Boost sieht dein Code manchmal aus wie Brainfuck...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949418</guid><dc:creator><![CDATA[boosty]]></dc:creator><pubDate>Tue, 07 Sep 2010 18:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to Startparameter verarbeitung on Tue, 07 Sep 2010 22:54:46 GMT]]></title><description><![CDATA[<p>weißnochnix schrieb:</p>
<blockquote>
<p>Und wie führt man dann eine Funktion aus?^^</p>
</blockquote>
<p>Gleich wie eine normale Funktion. Steht auch in der Dokumentation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1949494</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1949494</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 07 Sep 2010 22:54:46 GMT</pubDate></item></channel></rss>