So geben Sie C Compiler Freiheit über den RückgabewertLinux

Linux verstehen
Anonymous
 So geben Sie C Compiler Freiheit über den Rückgabewert

Post by Anonymous »

Sagen Sie, ich habe die folgende C -Funktion: < /p>

Code: Select all

i64 my_comparator1(i64 x, i64 y)
{
if (x > y) { return 1; }
if (x < y) { return -1; }
return 0;
}
< /code>
Wenn ich zufällig etwas über Argumente weiß, von dem Compiler nicht kennt, kann ich __builtin_unreachable verwenden: < /p>
i64 my_comparator2(i64 x, i64 y)
{
if (!((x = -100)) __builtin_unreachable();
if (!((y = -100)) __builtin_unreachable();
if (x > y) { return 1; }
if (x < y) { return -1; }
return 0;
}
Jetzt möchte ich dem Compiler vermitteln, dass nur der Rückgabewert wichtig ist. Daher ist es gültig, das Programm in diese zu verwandeln (signiert über/unterfluss ist UB bereits UB):

Code: Select all

i64 my_comparator(i64 x, i64 y) { return x - y; }
Sicher kann der Anrufer leicht den Unterschied erkennen, aber gibt es dem Compiler eine Möglichkeit, dem Compiler zu erklären, dass ich damit einverstanden bin? Es geht darum, dem Compiler mitzuteilen, dass < /p>

Der Code als geschriebener Wert zurückgibt. Wert X.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post