<?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[warning: ignoring return value]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>neuerdings beschwert sich der gcc (Version 4.3) über folgenden Code:</p>
<pre><code class="language-cpp">std::string foo(...);
char *end;
std::strtol(foo.c_str(), &amp;end, 10);
if (*end == '\0') { ... }
</code></pre>
<p>gcc schrieb:</p>
<blockquote>
<p>warning: ignoring return value of ‘long int strtol(const char*, char**, int)’, declared with attribute warn_unused_result</p>
</blockquote>
<p>Eigentlich möchte ich ja nur wissen, ob es sich bei dem String um eine ganze Zahl handelt, der Wert ist mir egal. Gibt es dafür eine bessere Funktion als strtol, oder kann ich gcc irgendwie (ohne eine Dummy-Variable) klarmachen, daß der Code genau so gemeint ist wie er da steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/225788/warning-ignoring-return-value</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 06:06:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/225788.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 25 Oct 2008 03:40:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 03:40:34 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>neuerdings beschwert sich der gcc (Version 4.3) über folgenden Code:</p>
<pre><code class="language-cpp">std::string foo(...);
char *end;
std::strtol(foo.c_str(), &amp;end, 10);
if (*end == '\0') { ... }
</code></pre>
<p>gcc schrieb:</p>
<blockquote>
<p>warning: ignoring return value of ‘long int strtol(const char*, char**, int)’, declared with attribute warn_unused_result</p>
</blockquote>
<p>Eigentlich möchte ich ja nur wissen, ob es sich bei dem String um eine ganze Zahl handelt, der Wert ist mir egal. Gibt es dafür eine bessere Funktion als strtol, oder kann ich gcc irgendwie (ohne eine Dummy-Variable) klarmachen, daß der Code genau so gemeint ist wie er da steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604467</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sat, 25 Oct 2008 03:40:34 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 10:39:38 GMT]]></title><description><![CDATA[<p>Also zuerst mal, dein Problem gehört wohl eher in die Compiler Abteilung. Was ich dir hier sagen kann, ist dass du ein paar Dinge verkehrt machst. In C++ macht man Zahlenkonvertierungen anders. Und wenn du nur überprüfen willst, ob ein String eine Ganzzahl repräsentiert, ohne an den Wert zu kommen, dann gibt es einfachere Möglichkeiten.</p>
<p>Konvertierung von String zu Zahl in C++:</p>
<pre><code class="language-cpp">std::string foo;
std::istringstream ss(foo);

long l;
if(ss &gt;&gt; l)
{
  // Erfolgreich.
}
else
{
  // Fehler.
}
</code></pre>
<p>Überprüfung ob es eine Ganzzahl ist:</p>
<pre><code class="language-cpp">std::string foo;

if(foo.find_first_not_of(&quot;0123456789&quot;) == std::string::npos)
{
  // Der String besteht nur aus den Zeichen 0,1,2,3,4,5,6,7,8 und 9
  // Ist also eine Ganzzahl.
}
else
{
  // Da wurde auch noch etwas anderes gefunden.
}
</code></pre>
<p><a href="http://www.cplusplus.com/reference/string/string/find_first_not_of.html" rel="nofollow">std::string::find_first_not_of</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604522</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 25 Oct 2008 10:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 10:12:41 GMT]]></title><description><![CDATA[<p>&lt;klugscheiß&gt;<br />
Dravere: 0 vergessen <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="😉"
    /><br />
&lt;/klugscheiß&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604530</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 25 Oct 2008 10:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 10:41:24 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>&lt;klugscheiß&gt;<br />
Dravere: 0 vergessen <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="😉"
    /><br />
&lt;/klugscheiß&gt;</p>
</blockquote>
<p>AAAAAAAAAAAARRRRRRGGGGGGGHHHH ... aber danke, ist nun korrigiert <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 />
Ich sitze hier noch in Pyjama und Morgenmantel vor dem PC, ist wohl noch die Müdigkeit vom Morgen mit dabei. Egal wie spät es gerade ist <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604540</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 25 Oct 2008 10:41:24 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 11:28:44 GMT]]></title><description><![CDATA[<p>tu ichs? oder lass ichs? ach ich tus einfach</p>
<p>&lt;klugscheiß&gt;<br />
Dravere: nun akzeptiert die Funktion aber auch strings wie &quot;00000000000000&quot;<br />
&lt;/klugscheiß&gt;</p>
<p>*duck und wegrenn* <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604560</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 25 Oct 2008 11:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 11:39:22 GMT]]></title><description><![CDATA[<p>Und was ist daran auszusetzen? Das ist eine Ganzzahl. Da sehe ich kein Problem damit ...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604569</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 25 Oct 2008 11:39:22 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 15:03:00 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>In C++ macht man Zahlenkonvertierungen anders.</p>
</blockquote>
<p>Da hast du natürlich Recht. Aber trotzdem ist es doch völlig legitim, den Rückgabewert von strtol() zu ignorieren, oder nicht? In C würde man ja vor dem selben Problem stehen.</p>
<pre><code class="language-cpp">std::string foo;
std::istringstream ss(foo);

long l;
if(ss &gt;&gt; l)
{
  // Erfolgreich.
}
else
{
  // Fehler.
}
</code></pre>
<p>Jo, das scheint mir nicht die schlechteste Lösung zu sein... Auch wenn es irgendwie schon schön wäre, wenn ich mir die eigentliche Umwandlung komplett sparen könnte.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Überprüfung ob es eine Ganzzahl ist:</p>
<pre><code class="language-cpp">std::string foo;

if(foo.find_first_not_of(&quot;0123456789&quot;) == std::string::npos)
{
  // Der String besteht nur aus den Zeichen 0,1,2,3,4,5,6,7,8 und 9
  // Ist also eine Ganzzahl.
}
else
{
  // Da wurde auch noch etwas anderes gefunden.
}
</code></pre>
</blockquote>
<p>Das funktioniert so allerdings nicht wirklich für ganze Zahlen, die ja schließlich auch negativ sein können...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604682</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sat, 25 Oct 2008 15:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sat, 25 Oct 2008 15:13:41 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Aber trotzdem ist es doch völlig legitim, den Rückgabewert von strtol() zu ignorieren, oder nicht? In C würde man ja vor dem selben Problem stehen.</p>
</blockquote>
<p>Ich denke eigentlich schon auch. Hast du vielleicht irgendwie die Warnungsstufe zu hoch eingestellt? Aber wie gesagt, da muss du mal im Compilerforum nachfragen. Ich kenne mich mit dem gcc zu wenig aus.</p>
<p>dooooomi schrieb:</p>
<blockquote>
<p>Das funktioniert so allerdings nicht wirklich für ganze Zahlen, die ja schließlich auch negativ sein können...</p>
</blockquote>
<p>Wie die Leute doch pingelig sind ...</p>
<pre><code class="language-cpp">bool is_integer(std::string const&amp; foo)
{
  if(foo.size() &gt; 0)
  {
    std::string::size_type start = 0;

    if(foo[0] == '-')
    { start = 1; }

    if(foo.find_first_not_of(&quot;0123456789&quot;, start) == std::string::npos)
    { return true; }
  }

  return false;
}
</code></pre>
<p>Ansonsten könntest du auch die Boost.Regex verwenden.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1604696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1604696</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 25 Oct 2008 15:13:41 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sun, 26 Oct 2008 17:40:15 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Konvertierung von String zu Zahl in C++:</p>
<pre><code class="language-cpp">std::string foo;
std::istringstream ss(foo);

long l;
if(ss &gt;&gt; l)
{
  // Erfolgreich.
}
else
{
  // Fehler.
}
</code></pre>
</blockquote>
<p>Moment mal... das macht ja doch nicht das selbe!</p>
<p>Der Sinn meines Codes (mit strtol) war ja herauszufinden, ob der String ein Integer enthält, und zwar <em>nur</em> ein Integer und mehr nicht. In der Stream-Variante kann nach der Zahl noch alles Mögliche folgen, und ich würde es nicht merken.</p>
<p>Also, die Frage bliebe: Wie kann ich strtol() durch sauberes C++ ersetzen, das genau den selben Effekt hat, und nicht aus einer einzigen Zeile 10 Zeilen oder mehr macht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605181</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sun, 26 Oct 2008 17:40:15 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sun, 26 Oct 2008 20:54:38 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Moment mal... das macht ja doch nicht das selbe!</p>
</blockquote>
<p>Ich habe ja gesagt, dass es eine Konvertierung ist.<br />
Allerdings könntest du das auch noch implementieren. Kurzes Programm zum selber testen:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;iostream&gt;

bool is_integer(std::string const&amp; text)
{
	long number;
	std::stringstream ss(text);
	return ss &gt;&gt; number &amp;&amp; ss.eof();
}

int main() 
{
	std::string line;
	std::getline(std::cin, text);

	while(line.compare(&quot;exit&quot;) != 0)
	{
		if(is_integer(line))		
		{ std::cout &lt;&lt; &quot;Number!&quot; &lt;&lt; std::endl; }
		else
		{ std::cout &lt;&lt; &quot;NaN!&quot; &lt;&lt; std::endl; }

		std::getline(std::cin, line);
	}

	return 0;
}
</code></pre>
<p>dooooomi schrieb:</p>
<blockquote>
<p>Also, die Frage bliebe: Wie kann ich strtol() durch sauberes C++ ersetzen, das genau den selben Effekt hat, und nicht aus einer einzigen Zeile 10 Zeilen oder mehr macht?</p>
</blockquote>
<p>Wie glaubst du ist strtol intern aufgebaut? Wahrscheinlich mit mehr als 10 Zeilen. Solche Funktionen lagert man in eine Headerdatei aus und macht sie inline. Dann kann man sie immer wieder verwenden.</p>
<p>strtol ist nämlich für deinen Fall völlig verkehrt. Du willst ja nicht die Zahl konvertieren, sondern nur feststellen, ob es eine Zahl ist. Genauso, wie die obige Lösung eigentlich verkehrt ist.<br />
Beim Programmieren sollte man nicht möglichst wenig Zeilen schreiben, dass ist der falsche Weg!</p>
<p>Aber ansonsten, du hast sicher Boost, dann könntest du natürlich auch das folgende machen, wieder mit einem Beispielprogramm:</p>
<pre><code class="language-cpp">#include &lt;boost/xpressive/xpressive.hpp&gt;

#include &lt;string&gt;
#include &lt;iostream&gt;

bool is_integer(std::string const&amp; text)
{
	using namespace boost::xpressive;

	sregex r = bos &gt;&gt; !as_xpr('-') &gt;&gt; +_d &gt;&gt; eos;
	return regex_match(text, r);
}

int main() 
{
	std::string line;
	std::getline(std::cin, line);

	while(line.compare(&quot;exit&quot;) != 0)
	{
		if(is_integer(line))		
		{ std::cout &lt;&lt; &quot;Number!&quot; &lt;&lt; std::endl; }
		else
		{ std::cout &lt;&lt; &quot;NaN!&quot; &lt;&lt; std::endl; }

		std::getline(std::cin, line);
	}

	return 0;
}
</code></pre>
<p>Edit: Eine Korrektur und mir kam noch eine kürzere Version in den Sinn :p</p>
<pre><code class="language-cpp">bool is_integer(std::string const&amp; text) 
{ 
	long number; 
	return (std::stringstream(text) &gt;&gt; number).eof(); 
}
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605259</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 26 Oct 2008 20:54:38 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Sun, 26 Oct 2008 23:28:00 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Wie glaubst du ist strtol intern aufgebaut? Wahrscheinlich mit mehr als 10 Zeilen. Solche Funktionen lagert man in eine Headerdatei aus und macht sie inline. Dann kann man sie immer wieder verwenden.</p>
<p>strtol ist nämlich für deinen Fall völlig verkehrt. Du willst ja nicht die Zahl konvertieren, sondern nur feststellen, ob es eine Zahl ist. Genauso, wie die obige Lösung eigentlich verkehrt ist.<br />
Beim Programmieren sollte man nicht möglichst wenig Zeilen schreiben, dass ist der falsche Weg!</p>
</blockquote>
<p>Mir geht es ja nicht darum, um jeden Preis so viele Codezeilen wie möglich einzusparen. Aber in vielen Fällen ist die kürzere Variante eben auch die übersichtlichere und lesbarere. Natürlich kann ich sowas als Funktion in eine Header-Datei packen, aber warum sollte ich selbst großartig Code schreiben für Sachen, die sich ohne weiteres auch mit Funktionen aus den Standard-Libraries erledigen lassen? Zumal ich es ja mit großer Wahrscheinlichkeit auch nicht besser machen könnte.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Edit: Eine Korrektur und mir kam noch eine kürzere Version in den Sinn :p</p>
<pre><code class="language-cpp">bool is_integer(std::string const&amp; text) 
{ 
	long number; 
	return (std::stringstream(text) &gt;&gt; number).eof(); 
}
</code></pre>
</blockquote>
<p>Sehr schön, gefällt mir :). Kurz und knapp. (und daß ich den Stream auf EOF testen muß, darauf hätte ich natürlich auch selbst kommen können).</p>
<p>Was mir noch nicht ganz klar ist: Du sagst, daß das eigentlich &quot;falsch&quot; ist, weil ich den String ja nur testen und nicht umwandeln möchte. Aber wo ist dabei eigentlich das Problem? Performance ist (im Allgemeinen) kein gutes Argument, also was dann?<br />
Und vor allem... nehmen wir mal an, ich möchte jetzt nicht Integers überprüfen, sondern Floats. Mit find_first_not_of und Co. kommt man da nicht weit, und ein regulärer Ausdruck ist auch nicht mehr ganz trivial. Welche vernünftigen Alternativen zum Umwandeln per Stream o.ä. blieben da noch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605305</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Sun, 26 Oct 2008 23:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 08:39:42 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Edit: Eine Korrektur und mir kam noch eine kürzere Version in den Sinn :p</p>
<pre><code class="language-cpp">bool is_integer(std::string const&amp; text) 
{ 
	long number; 
	return (std::stringstream(text) &gt;&gt; number).eof(); 
}
</code></pre>
</blockquote>
<p>Schön - aber ich würde einen <strong>i</strong>stringstream nehmen. Funktioniert zwar nicht anders als das Obige, aber irgendwie nehme ich lieber die Schnittstelle, die genau passt. <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>dooooomi schrieb:</p>
<blockquote>
<p>...<br />
Was mir noch nicht ganz klar ist: Du sagst, daß das eigentlich &quot;falsch&quot; ist, weil ich den String ja nur testen und nicht umwandeln möchte. Aber wo ist dabei eigentlich das Problem? Performance ist (im Allgemeinen) kein gutes Argument, also was dann?...</p>
</blockquote>
<p>Ich kann zwar nicht wirklich für Dravere antworten, aber ich hätte dasselbe geschrieben (wenn auch evtl. aus anderen Gründen).<br />
Es ist guter Stil, möglichst exakt das zu programmieren, was man auch tun will und nicht, &quot;von hinten durch die Brust ins Auge&quot;.<br />
Ich bin schon oft genug über sowas in fremdem Code gestolpert: &quot;Warum wandelt der das denn in eine Zahl um ? Was macht der denn mit der Zahl ?&quot; ... und dann fräst Du Dich durch 10.000 Zeilen Code - bloß um dann festzustellen, dass es ihm eigentlich nu darum ging, festzustellen, <em>ob</em> der Input eine Zahl ist, der Wert aber (in dieser Komponente) keine Rolle spielt.<br />
Gerne ist sowas dann mit wildem &quot;Variablenreuse&quot; gepaart.<br />
Mal ein Beispiel:</p>
<pre><code class="language-cpp">void do_some_freaky_stuff(long&amp;);

long L;
if(ss &gt;&gt; L)
{
   do_some_freaky_stuff(L);
   calc_really_important_nasa_operation(L);
}
</code></pre>
<p>... und dann findest Du nach 2 Tage Recherche in einem entlegenen Winkel des Projekts die Implementation:</p>
<pre><code class="language-cpp">void do_some_freaky_stuff(long&amp; L) {
   L = 17;
};
</code></pre>
<p>Hoppla - die Funktion nutzt ja den Parameter nur als output-Parmeter!!<br />
(kann man ja leider in C++ nicht von einem update-Parameter unterscheiden)<br />
Solchen Ärger kann man sich ersparen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605375</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 27 Oct 2008 08:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 09:50:54 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Schön - aber ich würde einen <strong>i</strong>stringstream nehmen. Funktioniert zwar nicht anders als das Obige, aber irgendwie nehme ich lieber die Schnittstelle, die genau passt. <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>
</blockquote>
<p>Stimme ich dir zu, war nur zu faul noch das <strong>i</strong> hinzuschreiben <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>Auch mit deiner Erklärung bin ich absolut einverstanden. Vielleicht noch ein wenig ergänzend in eigenen Worten:<br />
Man sollte zu einem Problem eine genaue Lösung liefern und nicht probieren eine andere Lösung umzubiegen, damit sie passt. So ein Vorgehen ist zum einen fehleranfällig und zum anderen für andere Leser des Codes nur sehr schwer verständlich.<br />
Zudem, aber das sei jetzt wirklich nur als zusätzliche und nebensächliche Notiz gesagt, ist die Effizient des ausgeführten Codes schlecht.</p>
<p>Am wichtigsten empfinde ich allerdings, was man dabei lernt. Wenn man Probleme immer wie mehr anfängt zu lösen, indem man andere Lösungen umbiegt, gewöhnt man sich einen schlechten Stil an. Es geht halt in der Programmierung oft um Gewohnheiten, da man Dinge immer wiederholt. Es ist daher das beste, wenn man sich das Gegenteil angewöhnt, also so wenig bis nie eine Lösung umbiegt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605416</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 27 Oct 2008 09:50:54 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 14:52:53 GMT]]></title><description><![CDATA[<p>Ich kann euch beiden da gar nicht wiedersprechen, prinzipiell bin ich ja eurer Meinung. Aber nichtsdestotrotz, so wie ich das sehe macht strtol 2 Dinge; es wandelt einen String in ein Integer um, <em>und</em> es prüft ob es sich bei dem String überhaupt um eine ganze Zahl handelt (und für den istringstream oder evtl. auch sowas wie boost::lexical_cast gilt das selbe).</p>
<p>So gesehen wird die Funktion ja nicht zweckentfremdet, sondern sie macht einfach ein kleines bißchen mehr als nötig. Daß der &quot;Rückgabewert&quot; nicht weiter benutzt wird ist sicherlich eine Sache, die man durch einen Kommentar oder zumindest die Benennung der Variable klarmachen sollte. Und letztlich ging es in meinem Ursprungs-Post ja genau um die Frage, wie ich an der Stelle um eine unnütze Dummy-Variable herumkomme.</p>
<p>Meine letzte Frage (Erkennung von float ohne Umwandlung) habt ihr übrigens beide nicht beantwortet <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/1605578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605578</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 27 Oct 2008 14:52:53 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 15:26:01 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Meine letzte Frage (Erkennung von float ohne Umwandlung) habt ihr übrigens beide nicht beantwortet <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>
</blockquote>
<p>Weil sie so trivial ist und man auch mit den String-Funktionen genausoweit kommt.</p>
<pre><code class="language-cpp">bool is_float(std::string const&amp; text)
{
  if(text.size() == 0)
  { return false; }

  std::string::size_type index = 0;

  if(text[0] == '-')
  { index = 1; }

  index = text.find_first_not_of(&quot;0123456789&quot;, index);

  if(index != std::string::npos &amp;&amp; text[index] == '.')
  { index = text.find_first_not_of(&quot;0123456789&quot;, index + 1); }

  return index == std::string::npos;
}
</code></pre>
<p>Und ein Regex sähe auch nicht so gross aus, über Boost geht das ganz einfach. Zudem sollten die Regulären Ausdrücke im nächsten Standard enthalten sein.</p>
<p>Zum Rest kann ich nichts mehr dazufügen. Ich habe gesagt wie ich es sehe und Simon auch. Die Funktion ist zur Umwandlung gedacht, den Syntaxcheck erfolgt logischerweise automatisch. Wenn du die Funktion zur Umwandlung nur als Syntaxcheck missbrauchst, dann ist das eine Zweckentfremdung in meinen Augen.<br />
Wir können dir allerdings nur Tipps geben, was du schlussendlich machst, das kannst nur du entscheiden. Wenn du die Tipps nicht befolgen willst, dann lern es eben selber. Es geht gut, bis es schief geht. <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605606</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 27 Oct 2008 15:26:01 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 15:53:17 GMT]]></title><description><![CDATA[<p>Das geht aber schief wenn die Zahl in der Exponentialschreibweise da steht. Also evtl. noch auf e E und + testen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605622</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 27 Oct 2008 15:53:17 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 15:56:14 GMT]]></title><description><![CDATA[<p>OMG, mit RegEx oder simplen Stringfunktionen zu prüfen, ob ein String eine Zahl ist, ist ein dirty hack. Ist &quot;1,001&quot; eine ganze Zahl? Ist &quot;٠&quot; es?<br />
Es ist ein größer Aufwand, das herauszufinden, also spart es euch und nutzt die vorhandenen Mechanismen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605623</guid><dc:creator><![CDATA[Superlexx]]></dc:creator><pubDate>Mon, 27 Oct 2008 15:56:14 GMT</pubDate></item><item><title><![CDATA[Reply to warning: ignoring return value on Mon, 27 Oct 2008 16:03:49 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>dooooomi schrieb:</p>
<blockquote>
<p>Meine letzte Frage (Erkennung von float ohne Umwandlung) habt ihr übrigens beide nicht beantwortet <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>
</blockquote>
<p>Weil sie so trivial ist und man auch mit den String-Funktionen genausoweit kommt.</p>
</blockquote>
<p>Erkennt dein Code auch Floats in Exponent-Schreibweise? Floats mit vorangestelltem &quot;+&quot;? &quot;inf&quot; und &quot;nan&quot;?</p>
<p>Natürlich, die Sachen kann man alle noch einbauen. Aber als trivial würde ich das nicht mehr bezeichnen. Der Punkt ist, über all diese Dinge hat sich schonmal jemand Gedanken gemacht, und es gibt gut funktionierende und tausendfach getestete Funktionen dafür in der Standard-Library. Warum sollte eine selbstgebastelte Lösung besser sein?</p>
<p>Und das nächste Mal kommt jemand daher, stellt die Locale des Programms auf Deutsch um, und plötzlich ist das Dezimaltrennzeichen das Komma und nicht mehr der Punkt. Für stringstream und strtof kein Problem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1605628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1605628</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Mon, 27 Oct 2008 16:03:49 GMT</pubDate></item></channel></rss>