<?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[32bit&#x2F;64bit&#x2F;...?]]></title><description><![CDATA[<p>hi ^^<br />
gibt es irgendeinen weg, herauszubekommen, ob das programm für 32 oder 64bit kompiliert wird?<br />
wieso ich das brauche: dumme HA in der Uni, in der man nicht einmal den header <code>cstdlib</code> includen darf - und dem zu folge auch kein <code>std::size_t</code> bzw <code>std::ptrdiff_t</code> hat...<br />
MSVC hat ja z.bsp. _WIN32 und _WIN64 - aber gibts da vll irgend nen makro, was der GCC auch definiert? ^^<br />
oder wie würdet ihr euch so etwas basteln, wenn ihr es selbst machen müsstet?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245125/32bit-64bit</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 21:52:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245125.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Jul 2009 21:21:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:21:08 GMT]]></title><description><![CDATA[<p>hi ^^<br />
gibt es irgendeinen weg, herauszubekommen, ob das programm für 32 oder 64bit kompiliert wird?<br />
wieso ich das brauche: dumme HA in der Uni, in der man nicht einmal den header <code>cstdlib</code> includen darf - und dem zu folge auch kein <code>std::size_t</code> bzw <code>std::ptrdiff_t</code> hat...<br />
MSVC hat ja z.bsp. _WIN32 und _WIN64 - aber gibts da vll irgend nen makro, was der GCC auch definiert? ^^<br />
oder wie würdet ihr euch so etwas basteln, wenn ihr es selbst machen müsstet?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740054</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:21:08 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:24:43 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>oder wie würdet ihr euch so etwas basteln, wenn ihr es selbst machen müsstet?</p>
</blockquote>
<p>Ich würde glaubich über <code>sizeof(long)</code> gehen. Müsste man nochmal nachschauen, aber afair ist das sowohl im MSVC als auch unter'm g++ 32/64 Bit breit, eben je nach Konfiguration.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740057</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:25:58 GMT]]></title><description><![CDATA[<p>Schau mal hier: <a href="http://predef.sourceforge.net/" rel="nofollow">http://predef.sourceforge.net/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740061</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:25:58 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:40:56 GMT]]></title><description><![CDATA[<p>Wie wäre es eigentlich mit <code>sizeof(void*)</code> ? Ein Zeiger müsste unter einem 64 Bit System eigentlich auch 64 Bit breit sein, oder? Wobei ich mir nicht ganz sicher bin, weil ich mal irgendwo gelesen habe, dass dies nicht immer der Fall sein soll ...</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740065</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740065</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:44:00 GMT]]></title><description><![CDATA[<p>Stimmt, klar, über die Zeiger <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Garantiert ist's natürlich nicht, aber solange man bei x86 bzw AMD64 und gängigen Compilern bleibt, sollte es klappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740067</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:49:11 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>oder wie würdet ihr euch so etwas basteln, wenn ihr es selbst machen müsstet?</p>
</blockquote>
<p>Ich würde glaubich über <code>sizeof(long)</code> gehen. Müsste man nochmal nachschauen, aber afair ist das sowohl im MSVC als auch unter'm g++ 32/64 Bit breit, eben je nach Konfiguration.</p>
</blockquote>
<p>Wie soll das mit sizeof gehen?<br />
sizeof wird doch erst zur Laufzeit ausgewertet - aber man brauch es ja zur Compilezeit schon... hatte wie dravere auch die idee mit sizeof(void*), allerdings gibts ja auch da das selbe problem ;o)</p>
<pre><code class="language-cpp">namespace std_copyed
{
#if sizeof(long) == 4
	typedef unsigned int size_t;
	typedef int ptrdiff_t;
#elif sizeof(long) == 8
	typedef unsigned long long size_t;
	typedef long long ptrdiff_t;
#endif
}
</code></pre>
<p>liefert logischerweise<br />
<code>fatal error C1017: invalid integer constant expression</code></p>
<p>rüdiger schrieb:</p>
<blockquote>
<p>Schau mal hier: <a href="http://predef.sourceforge.net/" rel="nofollow">http://predef.sourceforge.net/</a></p>
</blockquote>
<p>Danke - sieht gut aus : &gt;<br />
-&gt; <a href="http://predef.sourceforge.net/prearch.html#sec6" rel="nofollow">http://predef.sourceforge.net/prearch.html#sec6</a></p>
<p>also nehm ich im msvc<br />
<code>_M_IX86</code> bzw. <code>_M_IA64</code><br />
und im gcc<br />
<code>__i386__</code> bzw. <code>__IA64__</code><br />
oder hab ich da was falsch verstanden?<br />
an und für sich aber keine wirklich schöne lösung ^^</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740071</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 21:59:49 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>sizeof wird doch erst zur Laufzeit ausgewertet - aber man brauch es ja zur Compilezeit schon...</p>
</blockquote>
<p>sizeof wird schon zur Laufzeit ausgewertet, ist aber nunmal kein Makro/Define. Falls es dir nur um <code>size_t</code> und <code>ptrdiff_t</code> geht:</p>
<pre><code class="language-cpp">template&lt;int PointerBytes&gt;
struct MainTypes;

template&lt;&gt;
struct MainTypes&lt;4&gt;
{
	typedef int          Signed;
	typedef unsigned int Unsigned;
};

template&lt;&gt;
struct MainTypes&lt;8&gt;
{
	typedef long long          Signed;
	typedef unsigned long long Unsigned;
};

typedef MainTypes&lt;sizeof(void*)&gt;::Signed    ptrdiff_t;
typedef MainTypes&lt;sizeof(void*)&gt;::Unsigned  size_t;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1740075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740075</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 09 Jul 2009 21:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Thu, 09 Jul 2009 23:03:46 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>sizeof wird doch erst zur Laufzeit ausgewertet - aber man brauch es ja zur Compilezeit schon...</p>
</blockquote>
<p>sizeof wird schon zur Laufzeit ausgewertet, ist aber nunmal kein Makro/Define. Falls es dir nur um <code>size_t</code> und <code>ptrdiff_t</code> geht:</p>
<pre><code class="language-cpp">template&lt;int PointerBytes&gt;
struct MainTypes;

template&lt;&gt;
struct MainTypes&lt;4&gt;
{
	typedef int          Signed;
	typedef unsigned int Unsigned;
};

template&lt;&gt;
struct MainTypes&lt;8&gt;
{
	typedef long long          Signed;
	typedef unsigned long long Unsigned;
};

typedef MainTypes&lt;sizeof(void*)&gt;::Signed    ptrdiff_t;
typedef MainTypes&lt;sizeof(void*)&gt;::Unsigned  size_t;
</code></pre>
</blockquote>
<p>jopp, nur darum geht es mir - danke - hätt ich der wegen auch ma drauf kommen können <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=";D"
      alt="😉"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740105</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 09 Jul 2009 23:03:46 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 05:01:34 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>sizeof wird doch erst zur Laufzeit ausgewertet - aber man brauch es ja zur Compilezeit schon...</p>
</blockquote>
<p>sizeof wird schon zur Laufzeit ausgewertet, [...]</p>
<pre><code class="language-cpp">typedef MainTypes&lt;sizeof(void*)&gt;::Signed    ptrdiff_t;
</code></pre>
</blockquote>
<p>Möp. Was müssen Templateparameter sein? Richtig, Compilezeit-Konstanten. Und wann werden <em>Compilezeit</em>-Konstanten ausgewertet? Und am Schluss die Quizfrage: wenn der Compiler ein sizeof() als Templateparameter schluckt, wann wir das dann ausgewertet? (Und wann weiß ein Compiler die größe eines Datentyps?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740138</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 10 Jul 2009 05:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 06:46:07 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template&lt;int PointerBytes&gt;
struct MainTypes;

template&lt;&gt;
struct MainTypes&lt;4&gt;
{
	typedef int          Signed;
	typedef unsigned int Unsigned;
};

template&lt;&gt;
struct MainTypes&lt;8&gt;
{
	typedef long long          Signed;
	typedef unsigned long long Unsigned;
};

typedef MainTypes&lt;sizeof(void*)&gt;::Signed    ptrdiff_t;
typedef MainTypes&lt;sizeof(void*)&gt;::Unsigned  size_t;
</code></pre>
</blockquote>
<p>Woher weißt Du denn, dass ein <code>int</code> 4 Bytes groß ist und <code>long long</code> 8 Bytes groß ist? Wenn <code>int</code> und <code>char</code> und <code>void*</code> alle 32 Bit besitzen, bekommst Du mit sizeof jeweils eine 1 heraus.</p>
<p>Siehe <a href="http://en.wikipedia.org/wiki/Stdint.h#Integers_wide_enough_to_hold_pointers_.28optional.29" rel="nofollow">stdint.h</a> für vorgefertigts <code>typedef</code> s.</p>
<p>Wenn man sich <code>typedef</code> s für <code>intptr_t</code> und <code>uintptr_t</code> selber basteln will, könnte man das mit TMP (template meta programming) machen. Man schreibe sich Typlisten für <code>signed</code> und <code>unsigned</code> Ganzzahlen und durchläuft diese bis man einen gefunden hat, der die gleiche Größe wie ein <code>void*</code> besitzt:</p>
<pre><code class="language-cpp">struct nil {};

  template&lt;typename Head, typename Tail&gt;
  struct tl { typedef Head head; typedef Tail tail; };  

  typedef tl&lt;signed char, tl&lt;short, tl&lt;int, tl&lt;long,
          tl&lt;long long, nil&gt; &gt; &gt; &gt; &gt; signed_integers;

  typedef tl&lt;unsigned char, tl&lt;unsigned short, tl&lt;unsigned, tl&lt;unsigned long,
          tl&lt;unsigned long long, nil&gt; &gt; &gt; &gt; &gt; unsigned_integers;

  template&lt;typename List, unsigned Size&gt;
  struct select_first_by_size;
  // Implementierung bleibt dem Leser als Übung ueberlassen

  typedef select_first_by_size&lt;
          signed_integers, sizeof(void*) &gt;::type my_intptr_t;

  typedef select_first_by_size&lt;
          unsigned_integers, sizeof(void*) &gt;::type my_intptr_t;
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740157</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 10 Jul 2009 06:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 09:50:08 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Woher weißt Du denn, dass ein <code>int</code> 4 Bytes groß ist und <code>long long</code> 8 Bytes groß ist?</p>
</blockquote>
<p>Sehr wahrscheinlich weil er davon ausgeht, dass ein &quot;normaler&quot; Compiler genutzt wird. GCC, Builder, MSVC, Comeau ...</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wenn <code>int</code> und <code>char</code> und <code>void*</code> alle 32 Bit besitzen, bekommst Du mit sizeof jeweils eine 1 heraus.</p>
</blockquote>
<p>Nur könnte dann deine spezielle Maschine keine Bytes verarbeiten. Das wäre ein ziemlicher Sonderfall <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>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Siehe <a href="http://en.wikipedia.org/wiki/Stdint.h#Integers_wide_enough_to_hold_pointers_.28optional.29" rel="nofollow">stdint.h</a> für vorgefertigts <code>typedef</code> s.</p>
</blockquote>
<p>Witzbold. Das ist ein C99 Header und somit nicht Standard C++. Oben bemängelst du, dass die Lösung nicht dem Standard entspricht und dann verstösst du gleich selber dagegen ... lol</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wenn man sich <code>typedef</code> s für <code>intptr_t</code> und <code>uintptr_t</code> selber basteln will, könnte man das mit TMP (template meta programming) machen. Man schreibe sich Typlisten für <code>signed</code> und <code>unsigned</code> Ganzzahlen und durchläuft diese bis man einen gefunden hat, der die gleiche Größe wie ein <code>void*</code> besitzt:</p>
</blockquote>
<p>Und in diesem Code gleich nochmals. <code>long long</code> ist nicht enthalten im aktuellen C++ Standard <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>Naja, aber man könnte auch gleich Boost verwenden:<br />
<a href="http://www.boost.org/doc/libs/1_39_0/libs/integer/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_39_0/libs/integer/index.html</a></p>
<p>Allerdings nützt das reichlich wenig, wenn du, wie du es vorhin angesprochen hast, nicht auf den Wert eines <code>sizeof(void*)</code> Ausdruck gehen kannst.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740243</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 10 Jul 2009 09:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 20:16:23 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>unskilled schrieb:</p>
<blockquote>
<p>oder wie würdet ihr euch so etwas basteln, wenn ihr es selbst machen müsstet?</p>
</blockquote>
<p>Ich würde glaubich über <code>sizeof(long)</code> gehen. Müsste man nochmal nachschauen, aber afair ist das sowohl im MSVC als auch unter'm g++ 32/64 Bit breit, eben je nach Konfiguration.</p>
</blockquote>
<p>Nein. long, sowie auch int bleiben unter 64Bit Windows 32 Bit.<br />
<a href="http://msdn.microsoft.com/de-de/library/bb978906.aspx#_32-Bit%20und%2064-Bit%20in%20Koexistenz" rel="nofollow">http://msdn.microsoft.com/de-de/library/bb978906.aspx#_32-Bit und 64-Bit in Koexistenz</a></p>
<p>Lediglich Zeiger, sowie LongLong sind 64, was ich auch sinnvoll finde, dass nicht alles gleich 64 Bit wird..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740682</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 10 Jul 2009 20:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 20:39:30 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Lediglich Zeiger, sowie LongLong sind 64, was ich auch sinnvoll finde, dass nicht alles gleich 64 Bit wird..</p>
</blockquote>
<p>Wurde bloss aus Kompatibilitätsgründen so gemacht.<br />
&quot;Richtiger&quot; wäre IMO wenn zumindest long 64 Bit hätte.</p>
<p>Und dann gleich noch &quot;long long&quot; mit 128 Bit, jau, was wäre das fein <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/1740697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740697</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Jul 2009 20:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 20:51:35 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Lediglich Zeiger, sowie LongLong sind 64, was ich auch sinnvoll finde, dass nicht alles gleich 64 Bit wird..</p>
</blockquote>
<p>Wurde bloss aus Kompatibilitätsgründen so gemacht.<br />
&quot;Richtiger&quot; wäre IMO wenn zumindest long 64 Bit hätte.</p>
<p>Und dann gleich noch &quot;long long&quot; mit 128 Bit, jau, was wäre das fein <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>Ich finde je schon das komisch zu lesen: DWORD64</p>
<p>128 Bit, das wäre natürlich was.. :p - Ich bezweifle aber nicht, dass das früher, oder später noch kommt. Spätestens bei Windows 128Bit :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740701</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 10 Jul 2009 20:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Fri, 10 Jul 2009 23:37:19 GMT]]></title><description><![CDATA[<p>DWORD64 is wirklich einer der grossen Geniestreiche von Mirkosoft <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 />
Was kommt als nächstes, BYTE24? BOOL16? FLOAT80? DOUBLE32?<br />
Oder gleich WCHAR8 <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/1740762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740762</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 10 Jul 2009 23:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 00:28:18 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>DWORD64 is wirklich einer der grossen Geniestreiche von Mirkosoft <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 />
Was kommt als nächstes, BYTE24? BOOL16? FLOAT80? DOUBLE32?<br />
Oder gleich WCHAR8 <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>
</blockquote>
<p><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="😃"
    /> <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="😃"
    /> <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>
<p>naja - klar ists nich ganz sauber - aber immerhin logisch ^^<br />
man hätte auch QWORD für quad wählen können oder DDWORD xD<br />
aber da ist DWORD64 scho ein klein wenig besser, meinst du nicht auch?! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740777</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 11 Jul 2009 00:28:18 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 00:45:56 GMT]]></title><description><![CDATA[<blockquote>
<p>DDWORD</p>
</blockquote>
<p>Ich bin ja kein <a href="http://en.wiktionary.org/wiki/quatre-vingt-dix" rel="nofollow">Franzose</a> <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="😃"
    /><br />
Hätte das ganz klar QWORD genannt!</p>
<p>Oder es einfach mit UINT64 gut sein lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740781</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 11 Jul 2009 00:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 06:12:35 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Woher weißt Du denn, dass ein <code>int</code> 4 Bytes groß ist und <code>long long</code> 8 Bytes groß ist?</p>
</blockquote>
<p>Sehr wahrscheinlich weil er davon ausgeht, dass ein &quot;normaler&quot; Compiler genutzt wird. GCC, Builder, MSVC, Comeau ...</p>
</blockquote>
<p>Wie auch immer ... man sollte sich nicht auf die Größen verlassen. Ich würde sagen <code>long long</code> ist Quasi-Standard. Ohne <code>long long</code> hast Du eventuell keine Ganzzahl, die groß genug für einen Zeiger ist. All das, was ich vorgeschlagen habe, würde im schlimmsten Fall einfach nicht kompilieren. Falls es kompiliert, produziert das Programm wenigstens keinen Müll (keine &quot;silent errors&quot;).</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wenn <code>int</code> und <code>char</code> und <code>void*</code> alle 32 Bit besitzen, bekommst Du mit sizeof jeweils eine 1 heraus.</p>
</blockquote>
<p>Nur könnte dann deine spezielle Maschine keine Bytes verarbeiten. Das wäre ein ziemlicher Sonderfall <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>Ein Rechner kann <em>immer</em> Bytes einzeln verarbeiten. Nur manchmal sind Bytes auch 16 oder 32 bit groß. Es hat keiner behauptet, dass es sich dabei um Octets handeln muss.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Siehe <a href="http://en.wikipedia.org/wiki/Stdint.h#Integers_wide_enough_to_hold_pointers_.28optional.29" rel="nofollow">stdint.h</a> für vorgefertigts <code>typedef</code> s.</p>
</blockquote>
<p>Witzbold. Das ist ein C99 Header und somit nicht Standard C++. Oben bemängelst du, dass die Lösung nicht dem Standard entspricht und dann verstösst du gleich selber dagegen ... lol</p>
</blockquote>
<p>Das war echt kein Scherz. Ich würde den Header als Quasi-Standard bezeichnen. Er wird auch in C++0x übernommen (mit einer zsätzlichen C++ Version namens <code>&lt;cstdint&gt;</code> ). Falls es einen sochen Header nicht geben sollte, kompiliert Dein Programm nicht. Falls sizeof(int)!=4 gilt, obwohl Du Dich darauf verläßt, hast Du einen &quot;stillen Fehler&quot;. (kompiliert, aber Programm produziert Müll).</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wenn man sich <code>typedef</code> s für <code>intptr_t</code> und <code>uintptr_t</code> selber basteln will, könnte man das mit TMP (template meta programming) machen. Man schreibe sich Typlisten für <code>signed</code> und <code>unsigned</code> Ganzzahlen und durchläuft diese bis man einen gefunden hat, der die gleiche Größe wie ein <code>void*</code> besitzt:</p>
</blockquote>
<p>Und in diesem Code gleich nochmals. <code>long long</code> ist nicht enthalten im aktuellen C++ Standard <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>Ich bin mir dessen bewusst. Dankeschön.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Naja, aber man könnte auch gleich Boost verwenden:<br />
<a href="http://www.boost.org/doc/libs/1_39_0/libs/integer/index.html" rel="nofollow">http://www.boost.org/doc/libs/1_39_0/libs/integer/index.html</a></p>
</blockquote>
<p>Kann man. Der Header bindet stdint.h (oder etwas vergleichbares) ein, sofern existent, und kümmert sich auch um die Fälle, in denen keine Implementierungsdetails in Headern verfügbar sind.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Allerdings nützt das reichlich wenig, wenn du, wie du es vorhin angesprochen hast, nicht auf den Wert eines <code>sizeof(void*)</code> Ausdruck gehen kannst.</p>
</blockquote>
<p>Wie bitte? Du brauchst doch nur auf Gleichheit der Größen überprüfen<br />
( <code>sizeof(element_aus_typ_liste)==sizeof(void*)</code> ).</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740795</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 11 Jul 2009 06:12:35 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 09:43:33 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/36159">@Sebastian</a> Pizer,<br />
Also du darfst mit quasi Standard argumentieren, ich allerdings nicht? Interessant ...</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<p>Allerdings nützt das reichlich wenig, wenn du, wie du es vorhin angesprochen hast, nicht auf den Wert eines <code>sizeof(void*)</code> Ausdruck gehen kannst.</p>
</blockquote>
<p>Wie bitte? Du brauchst doch nur auf Gleichheit der Größen überprüfen<br />
( <code>sizeof(element_aus_typ_liste)==sizeof(void*)</code> ).</p>
</blockquote>
<p>Das bringt dir allerdings nichts. Ich habe gerade nochmal im Standard gesucht und bin nicht fündig geworden. Vielleicht kannst du etwas dazu finden und mich korrigieren, aber mir ist nicht bekannt, dass <code>sizeof(void*)</code> eine Grösse zurückliefern muss, welche einem <code>sizeof(X)</code> entsprechen muss, wobei X ein fundamentaler Typ ist. Also <code>sizeof(void*)</code> dürfte theoretisch einen Wert von 16 zurückgegeben, während dein grösster fundamentaler Typ nur 8 ist.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740847</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 11 Jul 2009 09:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 11:25:22 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/36159">@Sebastian</a> Pizer,<br />
Also du darfst mit quasi Standard argumentieren, ich allerdings nicht?<br />
Interessant ...</p>
</blockquote>
<p>Ja, darf ich. <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 />
Im Ernst: Der Unterschied ligt in der Kompilierbarkeit. Wenn es <code>stdint.h</code> nicht gibt, dann bekommst Du das Programm gar nicht erst erzeugt. Eine Annahme wie sizeof(int)==4 ist dem Compiler scheissegal. Wenn man Implementierungs-spezifische Details ausnutzt, dann sollte man dafür sorgen, dass das Programm wenigstens nicht kompiliert, wenn die Annahmen falsch sind. Außerdem ist <code>stdint.h</code> und <code>long long</code> seit 10 Jahren bei C99 dabei und ist schon seit einer ganzen Weile im C++0x Entwurf enthalten. Aktuelle Compiler, die beides können (C und C++), sollten diesen Header und <code>long long</code> anbieten. Ich habe aber ehrlich gesagt nicht den Überblick über Compiler, wie es mit der Unterstützung genau aussieht. Diese Typlisten-Trickserei hätte ich wahrscheinlich mit <code>#ifdef</code> s geklammert, dass <code>long long</code> nur dann auftaucht, wenn der Compiler das auch kann.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wie bitte? Du brauchst doch nur auf Gleichheit der Größen überprüfen<br />
( <code>sizeof(element_aus_typ_liste)==sizeof(void*)</code> ).</p>
</blockquote>
<p>Das bringt dir allerdings nichts. Ich habe gerade nochmal im Standard gesucht und bin nicht fündig geworden. Vielleicht kannst du etwas dazu finden und mich korrigieren, aber mir ist nicht bekannt, dass <code>sizeof(void*)</code> eine Grösse zurückliefern muss, welche einem <code>sizeof(X)</code> entsprechen muss, wobei X ein fundamentaler Typ ist.</p>
</blockquote>
<p>Ist <code>void*</code> ein fundamentaler Typ? <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="🙂"
    /> Du meinst X = Ganzzahltyp.</p>
<p>Dravere schrieb:</p>
<blockquote>
<p>Also <code>sizeof(void*)</code> dürfte theoretisch einen Wert von 16 zurückgegeben, während dein grösster fundamentaler Typ nur 8 ist.</p>
</blockquote>
<p>Kann gut sein. In einem solchen Fall gäbe es zu dem Problem auch keine Lösung. Da kann ich aber nichts für, wenn die Voraussetzungen für eine existierende Lösung nicht gegeben sind. C99 sagt auch, dass die typedefs für uintptr_t und intptr_t optional sind. Ich habe schon von Rechnern gehört, bei denen Zeiger 48 bittig waren und alle anderen Ganzzahltypen höchstens 32 Bit besaßen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740892</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740892</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 11 Jul 2009 11:25:22 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 12:11:13 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Ja, darf ich. <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 />
Im Ernst: Der Unterschied ligt in der Kompilierbarkeit.</p>
</blockquote>
<p>Nicht wirklich:</p>
<pre><code class="language-cpp">template&lt;bool&gt;
struct StaticAssert;

template&lt;&gt;
struct StaticAssert&lt;true&gt; { };

// ...

StaticAssert&lt;sizeof(int) == 4&gt; assert;
</code></pre>
<p>Finito, hier hast du deinen gewünschten Kompilerfehler.</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Ist <code>void*</code> ein fundamentaler Typ? <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="🙂"
    /> Du meinst X = Ganzzahltyp.</p>
</blockquote>
<p>Nein und Nein.<br />
<code>void*</code> ist ein Compound Type. Das sind alle Zeiger.<br />
X darf auch ein <code>float</code> oder <code>double</code> sein, auch wenn es nicht all zu viel Sinn macht.</p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Kann gut sein. In einem solchen Fall gäbe es zu dem Problem auch keine Lösung. Da kann ich aber nichts für, wenn die Voraussetzungen für eine existierende Lösung nicht gegeben sind.</p>
</blockquote>
<p>Dagegen sage ich ja auch nichts. Ich sage nur, dass du an der Lösung von Badestrand kritisierst, dass sich diese nicht an den Standard hält, aber deine tut es genauso wenig.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740918</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 11 Jul 2009 12:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to 32bit&#x2F;64bit&#x2F;...? on Sat, 11 Jul 2009 12:40:32 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Dagegen sage ich ja auch nichts. Ich sage nur, dass du an der Lösung von Badestrand kritisierst, dass sich diese nicht an den Standard hält, aber deine tut es genauso wenig.<br />
Grüssli</p>
</blockquote>
<p>So, wie ich das sehe, macht der Typlisten-Ansatz zwei Annahmen weniger, welche nicht vom C++ Standard garantiert werden -- nämlich sizeof(int)==4 und sizeof(long long)==8.</p>
<p>Ich habe nie behauptet, dass &quot;long long&quot; Teil des C++ Standards ist. Die Nutzung von &quot;long long&quot; in diesem Fall ist ein Trade-Off. Entweder es gibt einen Kompilierfehler, weil &quot;long long&quot; nicht bekannt ist, oder es gibt einem Kompilierfehler, weil sizeof(T)&lt;sizeof(void*) für alle anderen Ganzhaltypen T gilt und deswegen das Template-Metaprogramm fehlschlegt. Was ist das kleinere Übel? Ich weiss es nicht... Das wär mir aber auch ehrlichgesagt solange egal, bis das Programm woanders kompiliert werden soll. Dann kann man immernoch die Typlisten mit #ifdefs anpassen...</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1740935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1740935</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 11 Jul 2009 12:40:32 GMT</pubDate></item></channel></rss>