<?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[Wieso wird nicht initialisiert?]]></title><description><![CDATA[<p>Hallo!</p>
<p>So steht es überall:</p>
<pre><code class="language-cpp">CLSID cid;
CLSIDFromProgID(L&quot;InternetExplorer.Application&quot;, &amp;cid);
</code></pre>
<p>Intuitiv hatte ich jedoch geschrieben:</p>
<pre><code class="language-cpp">CLSID cid = {0};
CLSIDFromProgID(L&quot;InternetExplorer.Application&quot;, &amp;cid);
</code></pre>
<p>Also die CLSID, welche ein ja Strukt ist, mit Nullen initialisiert. Kann mir mal jemand sagen, <strong>ob das Initialisieren hier unnötig ist</strong> – und wieso?</p>
<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/295888/wieso-wird-nicht-initialisiert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 05:15:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295888.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Nov 2011 19:42:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 19:42:10 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>So steht es überall:</p>
<pre><code class="language-cpp">CLSID cid;
CLSIDFromProgID(L&quot;InternetExplorer.Application&quot;, &amp;cid);
</code></pre>
<p>Intuitiv hatte ich jedoch geschrieben:</p>
<pre><code class="language-cpp">CLSID cid = {0};
CLSIDFromProgID(L&quot;InternetExplorer.Application&quot;, &amp;cid);
</code></pre>
<p>Also die CLSID, welche ein ja Strukt ist, mit Nullen initialisiert. Kann mir mal jemand sagen, <strong>ob das Initialisieren hier unnötig ist</strong> – und wieso?</p>
<p>Dankeschön!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2147954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147954</guid><dc:creator><![CDATA[mikeem]]></dc:creator><pubDate>Wed, 23 Nov 2011 19:42:10 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 19:44:58 GMT]]></title><description><![CDATA[<p>Weil cid ein out Parameter ist, ist die Initialisierung technisch gesehen nicht nötig:<br />
<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms688386(v=vs.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/windows/desktop/ms688386(v=vs.85).aspx</a></p>
<p>BTW:<br />
Initialisierung in C++ mit default Werten eines Structs geht so:</p>
<pre><code class="language-cpp">CLSID cid = {};
</code></pre>
<p>Das 0 kann man weglassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2147958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147958</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 23 Nov 2011 19:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 19:50:30 GMT]]></title><description><![CDATA[<p>Ja es ist unnötig. Wieso ist das wohl so <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2147960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147960</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 23 Nov 2011 19:50:30 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 20:07:58 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Ja es ist unnötig. Wieso ist das wohl so <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>
</blockquote>
<p>Was soll denn das bedeuten? Dass es intuitiv und auch für Anfänger sofort ersichtlich ist, dass es hier keine Initialisierung braucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2147968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147968</guid><dc:creator><![CDATA[Tante Emma]]></dc:creator><pubDate>Wed, 23 Nov 2011 20:07:58 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 20:10:16 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Ja es ist unnötig. Wieso ist das wohl so <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>
</blockquote>
<p>Sachmal, wenn du nur Augen drehen willst, hättest du dir den Text auch gleich sparen können. Wieso muss immer jemand seine miese Laune an anderen rauslassen?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19131">@theta</a>, danke gute Antwort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2147969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147969</guid><dc:creator><![CDATA[mikeem]]></dc:creator><pubDate>Wed, 23 Nov 2011 20:10:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 20:11:48 GMT]]></title><description><![CDATA[<p>Tante Emma schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Ja es ist unnötig. Wieso ist das wohl so <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>
</blockquote>
<p>Was soll denn das bedeuten? Dass es intuitiv und auch für Anfänger sofort ersichtlich ist, dass es hier keine Initialisierung braucht?</p>
</blockquote>
<p>Das könnte bedeuten, dass man sich auch mal die Mühe machen könnte die Doku zu lesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2147971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147971</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 23 Nov 2011 20:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Wed, 23 Nov 2011 20:15:06 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Tante Emma schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Ja es ist unnötig. Wieso ist das wohl so <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>
</blockquote>
<p>Was soll denn das bedeuten? Dass es intuitiv und auch für Anfänger sofort ersichtlich ist, dass es hier keine Initialisierung braucht?</p>
</blockquote>
<p>Das könnte bedeuten, dass man sich auch mal die Mühe machen könnte die Doku zu lesen.</p>
</blockquote>
<p>Vielleicht <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><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/2147975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2147975</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Wed, 23 Nov 2011 20:15:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 13:57:57 GMT]]></title><description><![CDATA[<p>[quote=&quot;cooky451&quot;]</p>
<p>Tante Emma schrieb:</p>
<blockquote>
<p>Das könnte bedeuten, dass man sich auch mal die Mühe machen könnte die Doku zu lesen.</p>
</blockquote>
<p>Diese Mühe habe ich mir gemacht. Wieso ein &quot;in&quot; bzw &quot;out&quot; Parameter aber garantiert uninitialisiert sein darf, steht dort jedoch nicht. Was, wenn innerhalb dieser Funktion etwas schief geht, am falschen (0) Wert des Parameters würde man es jedenfalls nicht erkennen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148219</guid><dc:creator><![CDATA[mikeem]]></dc:creator><pubDate>Thu, 24 Nov 2011 13:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 14:06:16 GMT]]></title><description><![CDATA[<blockquote>
<p>ob das Initialisieren hier unnötig ist – und wieso?</p>
</blockquote>
<p>Weil Output-Variablen überschrieben werden und ihre Initialwerte (soweit sie nicht als InOut gekennzeichnet sind) nicht verwendet werden.</p>
<blockquote>
<p>Was, wenn innerhalb dieser Funktion etwas schief geht, am falschen (0) Wert des Parameters würde man es jedenfalls nicht erkennen können.</p>
</blockquote>
<p>Dafür gibt's die Funktionsrügabewerte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148221</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Thu, 24 Nov 2011 14:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 15:29:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Weil Output-Variablen überschrieben werden und ihre Initialwerte (soweit sie nicht als InOut gekennzeichnet sind) nicht verwendet werden.</p>
</blockquote>
<p>Und wo wird das so festgeschrieben? Kling ja einleuchtend, deckt sich mit Erfahrungen und ich will auch nicht haarespalten, mich interessiert nur wo man solche &quot;Grundgesetze&quot; findet. Die in/out Bezeichnung im MSDN sind ja nur Hinweise und keine Vorgabe wie der Datentyp, nehme ich an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148273</guid><dc:creator><![CDATA[mikeem]]></dc:creator><pubDate>Thu, 24 Nov 2011 15:29:39 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 15:33:48 GMT]]></title><description><![CDATA[<p>MSDN schrieb:</p>
<blockquote>
<p>Receives a pointer to the retrieved CLSID on return.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2148277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148277</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 24 Nov 2011 15:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 15:37:28 GMT]]></title><description><![CDATA[<p>mikeem schrieb:</p>
<blockquote>
<p>Und wo wird das so festgeschrieben? Kling ja einleuchtend, deckt sich mit Erfahrungen und ich will auch nicht haarespalten, mich interessiert nur wo man solche &quot;Grundgesetze&quot; findet. Die in/out Bezeichnung im MSDN sind ja nur Hinweise und keine Vorgabe wie der Datentyp, nehme ich an.</p>
</blockquote>
<p>Dazu gibt's keine Grundgesetze. Also na ja, wenn ein const* erwartet wird, wird nicht rein geschrieben, macht also irgendwie nur Sinn, wenn man Werte übergibt. Andersrum kann man sich allerdings nicht darauf verlassen, dass nicht auch gelesen wird. Daher wirst du wohl nicht drum herum kommen die Doku zu lesen. Im MSDN gibt es [in], [in/out] und [out]. Bei [out] wird natürlich nicht gelesen und deshalb sind die Eingangswerte egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148278</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 24 Nov 2011 15:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 15:44:02 GMT]]></title><description><![CDATA[<p>mikeem schrieb:</p>
<blockquote>
<p>Die in/out Bezeichnung im MSDN sind ja nur Hinweise und keine Vorgabe wie der Datentyp, nehme ich an.</p>
</blockquote>
<p>Doch, das sind Vorgaben. Ein bisschen Spielraum ist dir durch [opt] gegeben. An alles andere musst du dich bzw. deinen Code halten, wenn du nicht willst, dass da etwas schief läuft.</p>
<p>Ich korrigiere: es sind Hinweise auf die Funktionsweise der Methode und damit indirekt Vorgaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148282</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Thu, 24 Nov 2011 15:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 16:07:22 GMT]]></title><description><![CDATA[<p>Bei der API aus meinem ersten Beitrag steht das in/out als Randnotiz in der Hilfe (MSDN). Wie kommt man bei einer Hilfe-losen Funktion darauf, dass dieser Parameter uninitialisiert sein darf?<br />
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>
]]></description><link>https://www.c-plusplus.net/forum/post/2148293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148293</guid><dc:creator><![CDATA[mikeem]]></dc:creator><pubDate>Thu, 24 Nov 2011 16:07:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 16:10:19 GMT]]></title><description><![CDATA[<p>Ich verstehe dich nicht.</p>
<blockquote>
<p>Parameters</p>
<p>lpszProgID [in]<br />
A pointer to the ProgID whose CLSID is requested.</p>
<p>lpclsid [out]<br />
Receives a pointer to the retrieved CLSID on return.</p>
</blockquote>
<p>Das ist doch wohl mehr als deutlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148294</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 24 Nov 2011 16:10:19 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 16:14:26 GMT]]></title><description><![CDATA[<p>mikeem schrieb:</p>
<blockquote>
<p>Wie kommt man bei einer Hilfe-losen Funktion darauf, dass dieser Parameter uninitialisiert sein darf?<br />
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>
</blockquote>
<p>Die Funktion ist nicht &quot;Hilfe-los&quot;. In der Dokumentation steht absolut eindeutig wie die Funktion zu benutzen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148295</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Thu, 24 Nov 2011 16:14:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 19:46:24 GMT]]></title><description><![CDATA[<p>Bei einer Funktion mit out-Parametern, die &quot;schiefgehen&quot; <em>könnte</em>, kannst du davon ausgehen, dass einer der folgenden Punkte der Fall ist:</p>
<p>a) Wenns schiefgeht steht im out-Parameter ein Wert, der anzeigt, dass es schiefgegangen ist. Das sollte dokumentiert sein.<br />
b) Es gibt einen Rückgabewert oder einen anderen out-Parameter, der anzeigt, dass mit der Funktion was schiefgelaufen ist, und dass man sich auf den out-Parameter, um den es geht, nicht verlassen darf. Das sollte dokumentiert sein.<br />
c) Der Hersteller der Bibliothek hat wenig Ahnung und ein Stück Code geschaffen, bei dem man sich auf das Resultat im out-Parameter so oder so nicht verlassen kann, weil man keine Möglichkeit hat, festzustellen, ob etwas &quot;schiefgegangen&quot; ist oder nicht. Natürlich ist das dann auch nicht dokumentiert.</p>
<p>Im letzten Fall bringt leider auch eine vorherige Initialisierung nichts, weil du nicht sicher sein kannst, ob in der Funktion vor dem &quot;schiefgehen&quot; nicht schon irgendwas in den out-Parameter geschrieben wurde. Wenn du den Hersteller bzw. die Funktion verdächtigst, zu Kategorie c) zu gehören, gibt es nur eine Möglichkeit, ein verlässliches Programm zu schreiben: Andere Bibliothek und andere Funktion benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2148450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148450</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 24 Nov 2011 19:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to Wieso wird nicht initialisiert? on Thu, 24 Nov 2011 20:10:28 GMT]]></title><description><![CDATA[<p>Die &quot;__out&quot; Teile sind Attribute, die der MSVC verwenden kann um Static-Code-Analysis zu machen. Ich würde sie als &quot;100% verpflichtend&quot; ansehen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>:<br />
Ja, da fehlt wohl noch ein Konsens in der C++ Community.</p>
<p>COM z.B. schreibt einigermassen gut vor wie mit [out] Parametern umzugehen ist.<br />
Die Aufrufende Funktion sollte den Wert ignorieren, wenn die Funktion einen Fehler zurückgegeben hat.<br />
Und die Funktion selbst ist verpflichtet [out] Parameter auf einen Wert zu setzen, der<br />
a) unproblematisch als &quot;initialisiert&quot; behandelt werden kann und gleichzeitig<br />
b) kein &quot;cleanup&quot; erfordert<br />
wenn sie einen Fehler zurückgibt.<br />
Also z.B. 0 für BSTR, Interface-Zeiger oder dergleichen.</p>
<p>D.h. das wäre z.B. nicht OK:</p>
<pre><code class="language-cpp">HRESULT Fun([out] IUnknown** p1, [out] IUnknown** p2)
{
    if (p1)
        *p1 = 0;
    else
        return E_POINTER; // mööp, p2 könnte non-NULL sein, wurde aber nicht auf einen &quot;unproblematischen&quot; Wert gesetzt

    if (p2)
        *p2 = 0;
    else
        return E_POINTER;

    // ....
    return S_OK;
}
</code></pre>
<p>Korrekt müsste man es so machen:</p>
<pre><code class="language-cpp">HRESULT Fun([out] IUnknown** p1, [out] IUnknown** p2)
{
    if (p1)
        *p1 = 0;
    if (p2)
        *p2 = 0;

    if (!p1 || !p2)
         return E_POINTER;

    // ....
    return S_OK;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2148465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2148465</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 24 Nov 2011 20:10:28 GMT</pubDate></item></channel></rss>