[youtube]https://youtu.be/YXrb-DqsBNU[/youtube]
In Minute 9 macht er auf einen Bug in der SDL aufmerksam, der vermutlich inzwischen behoben sein dürfte.
Allerdings ist mir nicht so recht klar, was daran denn nun genau UB war.
[youtube]https://youtu.be/YXrb-DqsBNU?t=542[/youtube]
Code: Alles auswählen
QuequeCmdSetDrawColor(SDL_Renderer *renderer, const Uint8 r, const Uint8 g, const Uint8 b, sonst Uint8 a)
{
const Uint32 color = ((a << 24) | (r << 16) | (g << 8) | b); // UB
const Uint32 color = (((Uint32)a << 24) | (r << 16) | (g << 8) | b); // OK
...
}
Beschränkt sich hier das UB auf Plattformen mit int < 32 Bit? Da dann die Ganzzahlerweiterung noch zu klein gewesen wäre, um a << 24 zu shiften?
Oder ist es der Umstand, dass der rechte Ausdruck neben der Zuweisung schliesslich den Typ int hätte - und nicht unsigned int (also ein cast von int zu Uint32 mit einer potentiell negativen Zahl)?