<?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[Compiler kennt unbekannte Variable?]]></title><description><![CDATA[<p>Hi,</p>
<p>also manchmal stehe ich wirklich vor einem Rätsel, hier z.B. (ihr müsst die Fkt. nicht komplett lesen)</p>
<pre><code class="language-cpp">void UDPSocket::sendData( const sockaddr_in&amp; dest, unsigned long size )
{
        // First naive try to send the thing out
        long sent = sendto( m_socket, m_buffer, size, 0, reinterpret_cast&lt;
                const sockaddr* &gt;( &amp;dest ), sizeof( dest ) );

        // If sending did not succeed...
        unsigned long retries = 0;
        while ( sent == -1 &amp;&amp; retries++ &lt; m_sendRetries )
        {
                // Permanent error?
                if ( errno != EAGAIN )
                        SERPENTESERROR( &quot;sendto() failed!&quot; );

                // ...wait for buffer to clear
                fd_set fd;
                FD_ZERO( &amp;fd );
                FD_SET( m_socket, &amp;fd );

                timeval t;
                memset( &amp;t, 0, sizeof( t ) );
                t.tv_sec = 0;
                t.tv_usec = m_selectTimeoutUsec;

                select( m_socket + 1, 0, &amp;fd, 0, &amp;t );

                // Now either the buffer is clear or the select() call has tiemd out so
                // let's try again
                sent = sendto( m_socket, m_buffer, size, 0, reinterpret_cast&lt;
                        const sockaddr* &gt;( &amp;dest ), sizeof( dest ) );

                debugLog( toString( dest ) + &quot; Buffer full, retrying...&quot; );
        }

        if ( sent == -1 )
                SERPENTESERROR( &quot;Gave up sending an UDP packet.&quot; );
        else if ( sent != ( long )size )
                SERPENTESERROR( &quot;Packet partially sent? (&quot; + toString( sent ) +
                        &quot; bytes of &quot; + toString( size ) + &quot; sent)&quot; );

        debugLog( toString( dest ) + &quot; &quot; + toString( read ) + &quot; bytes sent.&quot; );
}
</code></pre>
<p>Interesant ist die letzte Zeile der Funktion. Dort verwende ich eine Variable namens read (die durch C&amp;P-Fehler meiner Empfangen-Funktion entstanden ist), die in dieser Methode nirgends definiert wird, auch gibt es keine globale Variable mit diesem Namen und keine Funktion (wobei der Compiler mit dieser Schreibweise ja eh keine Funktion aufrufen könnte).</p>
<p>Trotzdem gibt er lustigerweise folgendes aus:</p>
<blockquote>
<p>127.0.0.1:1337 1 bytes sent.</p>
</blockquote>
<p>Wie zum Teufel kommt er hier auf 1?!</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124848/compiler-kennt-unbekannte-variable</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 03:33:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124848.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Nov 2005 00:31:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 00:33:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also manchmal stehe ich wirklich vor einem Rätsel, hier z.B. (ihr müsst die Fkt. nicht komplett lesen)</p>
<pre><code class="language-cpp">void UDPSocket::sendData( const sockaddr_in&amp; dest, unsigned long size )
{
        // First naive try to send the thing out
        long sent = sendto( m_socket, m_buffer, size, 0, reinterpret_cast&lt;
                const sockaddr* &gt;( &amp;dest ), sizeof( dest ) );

        // If sending did not succeed...
        unsigned long retries = 0;
        while ( sent == -1 &amp;&amp; retries++ &lt; m_sendRetries )
        {
                // Permanent error?
                if ( errno != EAGAIN )
                        SERPENTESERROR( &quot;sendto() failed!&quot; );

                // ...wait for buffer to clear
                fd_set fd;
                FD_ZERO( &amp;fd );
                FD_SET( m_socket, &amp;fd );

                timeval t;
                memset( &amp;t, 0, sizeof( t ) );
                t.tv_sec = 0;
                t.tv_usec = m_selectTimeoutUsec;

                select( m_socket + 1, 0, &amp;fd, 0, &amp;t );

                // Now either the buffer is clear or the select() call has tiemd out so
                // let's try again
                sent = sendto( m_socket, m_buffer, size, 0, reinterpret_cast&lt;
                        const sockaddr* &gt;( &amp;dest ), sizeof( dest ) );

                debugLog( toString( dest ) + &quot; Buffer full, retrying...&quot; );
        }

        if ( sent == -1 )
                SERPENTESERROR( &quot;Gave up sending an UDP packet.&quot; );
        else if ( sent != ( long )size )
                SERPENTESERROR( &quot;Packet partially sent? (&quot; + toString( sent ) +
                        &quot; bytes of &quot; + toString( size ) + &quot; sent)&quot; );

        debugLog( toString( dest ) + &quot; &quot; + toString( read ) + &quot; bytes sent.&quot; );
}
</code></pre>
<p>Interesant ist die letzte Zeile der Funktion. Dort verwende ich eine Variable namens read (die durch C&amp;P-Fehler meiner Empfangen-Funktion entstanden ist), die in dieser Methode nirgends definiert wird, auch gibt es keine globale Variable mit diesem Namen und keine Funktion (wobei der Compiler mit dieser Schreibweise ja eh keine Funktion aufrufen könnte).</p>
<p>Trotzdem gibt er lustigerweise folgendes aus:</p>
<blockquote>
<p>127.0.0.1:1337 1 bytes sent.</p>
</blockquote>
<p>Wie zum Teufel kommt er hier auf 1?!</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905366</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 01 Nov 2005 00:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 00:46:03 GMT]]></title><description><![CDATA[<p>Stell nen minimales, kompilierbares Beispiel zusammen und gut is.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905371</guid><dc:creator><![CDATA[.............]]></dc:creator><pubDate>Tue, 01 Nov 2005 00:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 00:49:58 GMT]]></title><description><![CDATA[<p>Ist das vielleicht die Problematik?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

int main()
{
	std::cout &lt;&lt; MessageBox &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/905372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905372</guid><dc:creator><![CDATA[msgbox]]></dc:creator><pubDate>Tue, 01 Nov 2005 00:49:58 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 06:44:04 GMT]]></title><description><![CDATA[<p>Vielleicht ist in einem Header (der nicht von dir ist) ein Makro namens read. Gaaanz böse! Hatt ich schon mal, das ich eine Variable komplett groß geschrieben habe (ich glaub MAXIMUM). ALs ich sie benutzen wollte, hat der Compiler gemeckert, das es ein fehler gibt. Ich wußte nicht wieso. Am Ende stellte sich raus, das es ein Makro von MS war, das natürlich meine Variable bei Benutzung ersetzt hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905397</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Tue, 01 Nov 2005 06:44:04 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 09:25:32 GMT]]></title><description><![CDATA[<p>Vergesst es...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905469</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Tue, 01 Nov 2005 09:25:32 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 14:30:20 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Problem reduziert:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main( void )
{
        std::cout &lt;&lt; read &lt;&lt; std::endl;
        return 0;
}
</code></pre>
<p>Nur kommt hier jetzt eine Warnung:</p>
<blockquote>
<p>chris@daedalus ~/Coding $ g++ -Wall -Wextra -ansi -pedantic -I/usr/include/SDL -D_REENTRANT test.cpp<br />
test.cpp: In function <code>int main()': test.cpp:6: warning: the address of \</code>ssize_t read(int, void*, size_t)', will always evaluate as `true'</p>
</blockquote>
<p>Warum kommt die Warnung bei meinem Projekt nicht, obwohl ich dort genau mit den gleichen Schaltern compiliere?<br />
Siehe <a href="http://cvs.sourceforge.net/viewcvs.py/serpentes/serpentes/Makefile?view=markup" rel="nofollow">http://cvs.sourceforge.net/viewcvs.py/serpentes/serpentes/Makefile?view=markup</a></p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905745</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 01 Nov 2005 14:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 14:39:17 GMT]]></title><description><![CDATA[<p>Was ist die Signatur von toString?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905753</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 01 Nov 2005 14:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 14:49:13 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ganz simpel...</p>
<pre><code class="language-cpp">template&lt; typename T &gt;
        std::string toString( T value )
        {
                std::ostringstream stringStream;
                stringStream &lt;&lt; value;
                return stringStream.str();
        }

        std::string toString( const struct sockaddr_in&amp; addr );
</code></pre>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905765</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 01 Nov 2005 14:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 16:00:57 GMT]]></title><description><![CDATA[<p>Weil in Deinem Fall eine Funktion mit der Funktionspointersignatur (tolles Wort <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="🙄"
    />) von read erstellt wird. Das wäre dann also:</p>
<pre><code class="language-cpp">std::string toString( ssize_t (*read)(int, void*, size_t) value )
{
   std::ostringstream stringStream;
   stringStream &lt;&lt; value;
   return stringStream.str();
}
</code></pre>
<p>value ist also ein Zeiger auf eine Funktion. Diesen Zeiger darf man nach bool casten und der kann true oder false ergeben, je nachdem ob Du einen NULL-Zeiger reinsteckst. Das kann der Compiler an der Stelle ja nicht wissen.<br />
Bei Deiner Ausgabe (mit Warning) wird das read direkt in einen bool gecastet und da weiss der Compiler, dass gibt immer true.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905827</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Tue, 01 Nov 2005 16:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 17:10:12 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>aber in meiner toString()-Templatefunktion caste ich in der zweiten Zeile doch auch direkt nach bool, oder?</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905876</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 01 Nov 2005 17:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 17:49:26 GMT]]></title><description><![CDATA[<p>Das ist aber ein Cast wie in der folgenden Routine:</p>
<pre><code class="language-cpp">void f( void* x)
{
  if( x) {
    cout &lt;&lt; &quot;true&quot; &lt;&lt; endl;
  }
}
</code></pre>
<p>Der Compiler warnt bei der Abfrage doch auch nicht. x könnte ja auch NULL sein und damit falsch.<br />
In Deiner Template Methode ist es genauso. Dein Template Parameter könnte ja ein NULL Pointer sein.<br />
In Deiner direkten Ausgabe mit cout &lt;&lt; read kann read nie ein NULL Pointer sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/905900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/905900</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Tue, 01 Nov 2005 17:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to Compiler kennt unbekannte Variable? on Tue, 01 Nov 2005 23:12:14 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ach so ja klar, habs verstanden.</p>
<p>Vielen Dank! <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>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/906094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/906094</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Tue, 01 Nov 2005 23:12:14 GMT</pubDate></item></channel></rss>