<?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[union mit bitfield-struct und long int - undefined behavior]]></title><description><![CDATA[<p>ich räume hier gerade 15 Jahre alten C/C++ Code auf und bin auf folgendes gestossen (versuche so vorsichtig wie möglich alten Visual C++ 97/98 Code auf Standardkonform und mit normalen C/C++ Kompiler baubar zu machen)</p>
<pre><code>union test 
{
  struct 
  {
    unsigned a1: 16;
    unsigned a2: 12;
    unsigned a3: 3;
    unsigned a4: 1;
  };
  struct {
    unsigned b1: 24;
    unsigned b2: 7;
    unsigned b3: 1;
  };
  long int as_long_int;
};

int main()
{
  //Nutzungbeispiel
  test t;
  t.as_long_int = 20;
  unsigned x = t.a1;
  unsigned y = t.b1;
  t.b1 = 20;
  long int z = t.as_long_int;
  return x+y+z;
}
</code></pre>
<p>ist das bezüglich Undefined Behavior irgendwie böse - oder alles in Ordnung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338942/union-mit-bitfield-struct-und-long-int-undefined-behavior</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 21:57:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338942.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jul 2016 18:54:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to union mit bitfield-struct und long int - undefined behavior on Fri, 22 Jul 2016 18:54:26 GMT]]></title><description><![CDATA[<p>ich räume hier gerade 15 Jahre alten C/C++ Code auf und bin auf folgendes gestossen (versuche so vorsichtig wie möglich alten Visual C++ 97/98 Code auf Standardkonform und mit normalen C/C++ Kompiler baubar zu machen)</p>
<pre><code>union test 
{
  struct 
  {
    unsigned a1: 16;
    unsigned a2: 12;
    unsigned a3: 3;
    unsigned a4: 1;
  };
  struct {
    unsigned b1: 24;
    unsigned b2: 7;
    unsigned b3: 1;
  };
  long int as_long_int;
};

int main()
{
  //Nutzungbeispiel
  test t;
  t.as_long_int = 20;
  unsigned x = t.a1;
  unsigned y = t.b1;
  t.b1 = 20;
  long int z = t.as_long_int;
  return x+y+z;
}
</code></pre>
<p>ist das bezüglich Undefined Behavior irgendwie böse - oder alles in Ordnung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503087</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Fri, 22 Jul 2016 18:54:26 GMT</pubDate></item><item><title><![CDATA[Reply to union mit bitfield-struct und long int - undefined behavior on Fri, 22 Jul 2016 19:48:24 GMT]]></title><description><![CDATA[<p>Theoretisch ziemlich böse, sowohl wechselhafter Zugriff auf Unions, als auch Ausnutzen der internen Darstellung von Bitfeldern und Integern. Praktisch gesehen wird es relativ verlässlich funktionieren, wenn man immer nur für gleichartige Systeme compiliert, am besten sogar immer den gleichen Compiler nutzt. Deswegen wird das auch noch niemandem in all den Jahren um die Ohren geflogen sein. Ändere es aber trotzdem. Sind bloß ein paar Bitschiebeoperationen, wenn man es standardkonform machen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503088</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 22 Jul 2016 19:48:24 GMT</pubDate></item><item><title><![CDATA[Reply to union mit bitfield-struct und long int - undefined behavior on Fri, 22 Jul 2016 19:55:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Sind bloß ein paar Bitschiebeoperationen, wenn man es standardkonform machen möchte.</p>
</blockquote>
<p>du würdest also ein long int als einzigen Member nutzen mit set/get-Funktionen fuer a1,a2,... usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503090</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Fri, 22 Jul 2016 19:55:25 GMT</pubDate></item><item><title><![CDATA[Reply to union mit bitfield-struct und long int - undefined behavior on Fri, 22 Jul 2016 20:01:48 GMT]]></title><description><![CDATA[<p>Gast3 schrieb:</p>
<blockquote>
<p>du würdest also ein long int als einzigen Member nutzen mit set/get-Funktionen fuer a1,a2,... usw.</p>
</blockquote>
<p>Nein, eigentlich nicht, aber mag sein, dass mir nicht ganz klar ist, worum es hier geht. Nach deinem reduzierten Beispiel sah es so aus, als ginge es darum, bestimmte Bits einer Zahl abzufragen bzw. zu setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503091</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 22 Jul 2016 20:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to union mit bitfield-struct und long int - undefined behavior on Fri, 22 Jul 2016 20:15:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Nein, eigentlich nicht, aber mag sein, dass mir nicht ganz klar ist, worum es hier geht. Nach deinem reduzierten Beispiel sah es so aus, als ginge es darum, bestimmte Bits einer Zahl abzufragen bzw. zu setzen.</p>
</blockquote>
<p>ja schon - nur eben in ein paar tausend Zeilen Code - deswegen die Funktionen - und der Member weil der long int durch die Schnittstellen gereicht wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503092</guid><dc:creator><![CDATA[Gast3]]></dc:creator><pubDate>Fri, 22 Jul 2016 20:15:57 GMT</pubDate></item></channel></rss>