<?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[enum - Größe garantieren]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich programmiere gerade ein programm das sich übers netzwerk verbindet und dieses soll natürlich auf 64 bit sowie 32 bit laufen.</p>
<p>nur habe ich in meinem packet das ich versende einen mit enum definierten datentyp, und mein compiler sagt mir das standartmäßig die enum typen als int ( 32 bit ) behandelt werden und ich möchte jetzt aber garantiert haben das das 4 byte variabeln sind ohne meinen coding style verwerfen zu müssen. ( sprich enum durch eine einfache __int32 ersetzen )</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/232521/enum-größe-garantieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 04:19:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/232521.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Jan 2009 16:38:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 16:38:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich programmiere gerade ein programm das sich übers netzwerk verbindet und dieses soll natürlich auf 64 bit sowie 32 bit laufen.</p>
<p>nur habe ich in meinem packet das ich versende einen mit enum definierten datentyp, und mein compiler sagt mir das standartmäßig die enum typen als int ( 32 bit ) behandelt werden und ich möchte jetzt aber garantiert haben das das 4 byte variabeln sind ohne meinen coding style verwerfen zu müssen. ( sprich enum durch eine einfache __int32 ersetzen )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651005</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Fri, 23 Jan 2009 16:38:09 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 17:18:29 GMT]]></title><description><![CDATA[<p>enum ist standard-mäßig ein int...<br />
ob es auf 64bit systemen auch 32bit groß ist, kann ich dir leider nicht genau sagen, aber das geht eigtl ganz einfach zu umgehen:</p>
<p>- falls du unter windows programmierst und nur mit msvc compilieren willst, dann kannste das so machen: (neues feature, was von gcc imho noch nicht unterstützt wird (weil der standard noch nicht verabschiedet ist ^^) - der msvc kann das aber schon <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>
<pre><code class="language-cpp">enum xyz : int
{
//einträge wie gewohnt
}
</code></pre>
<p>- falls eine bestimmte _mindest_ - größe reicht:</p>
<pre><code class="language-cpp">enum xyz
{
//einträge wie gehabt
 _forceINT = 0xffffffff; //4 bytes
}
</code></pre>
<p>bevor du jz mit c++ kommst und statt <code>0xffffffff</code> einen wert aus numeric_limits nehmen möchtest: würde ich von abraten, weil dann das ergebnis wieder compiler-abhängig ist...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651030</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 23 Jan 2009 17:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 17:39:38 GMT]]></title><description><![CDATA[<p>Ganz nebenbei, es ist auch nicht garantiert, daß int 32 Bit groß ist. Wenn du Daten in einem plattformunabhängigen Format über's Netz schicken möchtest, solltest du für die Datenpakete immer feste Größen verwenden, die nicht von den Datentypen des jeweiligen Compilers abhängen. Das gilt für enum genauso wie für int, von daher würde auch die Größe von enums dem Compiler überlassen, und für's Senden der Daten dann beispielsweise auf int32 o.ä. casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651042</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Fri, 23 Jan 2009 17:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 18:13:29 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>Ganz nebenbei, es ist auch nicht garantiert, daß int 32 Bit groß ist.</p>
</blockquote>
<p>deshalb meine einschränkung mit nur msvc... weil da ein int eben doch 32bit lang ist - immer ^^<br />
und ich find es ein wenig dumm jedes mal wieder dieses _theoretische_ problem auszudiskutieren... ich kann mir jedenfalls nicht vorstellen, dass man freiwillig nen compiler nimmt, bei dem nem int nicht genau 32 bit sind...</p>
<p>dooooomi schrieb:</p>
<blockquote>
<p>für's Senden der Daten dann beispielsweise auf int32 o.ä. casten</p>
</blockquote>
<p>Jopp - das ist die unabhängiger Lösung ^^ aber es war gefragt, wie er das enum sicher auf eine bestimmte größe bekommt, deshalb meine antwort mit dem _forceint bzw. vererbung oder wie man das bei enums nennt... ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651057</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:13:29 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 18:19:37 GMT]]></title><description><![CDATA[<p>Wenn man das Feature mit dem Doppelpunkt und dem Typen danach nur unter MSVC nutzen kann, kann man gleich davon ausgehen, dass <code>int</code> bei dieser IDE 32 Bit gross ist.</p>
<p>unskilled, welchen Effekt hat das <code>_forceINT</code> genau? Würde das nicht auch abgeschnitten, falls <code>enum</code> -Typen weniger als 4 Byte hätten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651065</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 18:29:48 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>unskilled, welchen Effekt hat das <code>_forceINT</code> genau? Würde das nicht auch abgeschnitten, falls <code>enum</code> -Typen weniger als 4 Byte hätten?</p>
</blockquote>
<p>ne - es sorgt dafür, dass das enum mind. 4 Byte bekommt...<br />
wird auch sehr oft in den direct 3d headern gemacht (da hab ich es damals zumindest das erste mal gesehen)</p>
<p>logischerweise kann ein compiler so nen enum:</p>
<pre><code class="language-cpp">enum a
{
 a1,
 a2
}
</code></pre>
<p>als char/short oder als int (oder größer?) behandeln - damit das char und short wegfällt gibt es eben diesen trick:</p>
<pre><code class="language-cpp">enum a
{
 a1,
 a2,

 _forceINT = 0xffffffff
}
</code></pre>
<p>aber größer als nen int kann das enum dadurch trotzdem noch werden - ich weiß nicht, ob enum nen größt-möglichen typen besitzt deshalb kann ich nicht sicher sagen, dass es dann lt. standard genau 4byte ist...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651073</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:29:48 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 18:44:12 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>und ich find es ein wenig dumm jedes mal wieder dieses _theoretische_ problem auszudiskutieren... ich kann mir jedenfalls nicht vorstellen, dass man freiwillig nen compiler nimmt, bei dem nem int nicht genau 32 bit sind...</p>
</blockquote>
<p>Naja, ganz so theoretisch ist das Problem auch wieder nicht. Natürlich ist ein int auf x86-64 unter allen gängigen Betriebssystemen nur 32 Bit groß. Es gibt aber andere 64-Bit Plattformen (jenseits von x86), auf denen int tatsächlich 64 Bit groß ist (was ja irgendwo auch logisch ist). Und ja, auch solche Plattformen benutzt man freiwillig <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/1651085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651085</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Fri, 23 Jan 2009 18:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Fri, 23 Jan 2009 19:12:49 GMT]]></title><description><![CDATA[<p>Hm, das wusste ich bisher nicht. Der Standard sagt dazu Folgendes:</p>
<p>7.2/5 schrieb:</p>
<blockquote>
<p>The underlying type of an enumeration is an integral type that can represent all the enumerator values defined in the enumeration. It is implementation-defined which integral type is used as the underlying type for an enumeration except that the underlying type shall not be larger than int unless the value of an enumerator cannot fit in an int or unsigned int.</p>
</blockquote>
<p>Also darf der <code>enum</code> -Typ nicht grösser als <code>int</code> sein, wenn alle Werte mit <code>int</code> dargestellt werden können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651111</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 23 Jan 2009 19:12:49 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Sat, 24 Jan 2009 12:08:58 GMT]]></title><description><![CDATA[<p>gut - also ist der weg mit _forceint = 0xffffffff doch der beste weg ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1651336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1651336</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 24 Jan 2009 12:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Thu, 29 Jan 2009 16:42:52 GMT]]></title><description><![CDATA[<p>danke für die vielen antworten,</p>
<p>ich benutze jetzt enum : typ {... da ich eine genaue größere forcieren muss und nicht eine minmalgröße garantieren <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="😃"
    /> aber auch vielen dank für diese möglichkeit ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654488</guid><dc:creator><![CDATA[Schurke]]></dc:creator><pubDate>Thu, 29 Jan 2009 16:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Thu, 29 Jan 2009 16:55:27 GMT]]></title><description><![CDATA[<p>Warum benutzt du dann nicht einfach uint32 oder int32 anstatt des enums. int ist beim gcc auf 64bit Maschinen auch 64bit lang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654499</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 29 Jan 2009 16:55:27 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Thu, 29 Jan 2009 17:28:39 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>int ist beim gcc auf 64bit Maschinen auch 64bit lang.</p>
</blockquote>
<p>Jein. Wie weiter oben schon erwähnt gibt es durchaus Plattformen, wo dem so ist. Auf einem normalen x86-64 Linux, OS X oder Windows ist int aber nach wie vor nur 32 Bit groß. Man sollte sich nur nicht drauf verlassen, wenn man wirklich plattformunabhängigen Code schreiben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654526</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Thu, 29 Jan 2009 17:28:39 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Thu, 29 Jan 2009 18:39:57 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Warum benutzt du dann nicht einfach uint32 oder int32 anstatt des enums.</p>
</blockquote>
<p>Wieso anstatt? <code>enum</code> -Typen sind mit anderen integralen Typen nicht gleichzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654560</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 29 Jan 2009 18:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to enum - Größe garantieren on Thu, 29 Jan 2009 20:13:19 GMT]]></title><description><![CDATA[<p>Schurke schrieb:</p>
<blockquote>
<p>ich benutze jetzt enum : typ</p>
</blockquote>
<p>dann nimm (wie gesagt) int32 als typ...</p>
<p>Aber da Nexus oben geschrieben hat, dass lt Standard ein enum nicht größer sein darf, als ein int (ich geh einfach mal davon aus, dass du keine 2^32 einträge in das enum packen willst - und ich denke auch mal, dass das die wenigsten compiler unterstützen werden... ^^), dann kannst du auch die lösung mit dem _forceInt = 0xffffffff nehmen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1654627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1654627</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 29 Jan 2009 20:13:19 GMT</pubDate></item></channel></rss>