Czy mogę używać __builtin_expect () GCC z operatorem trójskładnikowym w C
TheInstrukcja GCC pokazuje tylko przykłady, gdzie __builtin_expect () jest umieszczony wokół całego warunku instrukcji „if”.
Zauważyłem również, że GCC nie narzeka, jeśli używam go, na przykład, z operatorem trójskładnikowym, lub w dowolnym arbitralnym wyrażeniu integracyjnym w tym zakresie, nawet takim, który nie jest używany w kontekście rozgałęzienia.
Zastanawiam się więc, jakie są w rzeczywistości podstawowe ograniczenia jego użycia.
Czy zachowa swój efekt, gdy zostanie użyty w operacji trójskładnikowej takiej jak ta:
int foo(int i)
{
return __builtin_expect(i == 7, 1) ? 100 : 200;
}
A co z tą sprawą:
int foo(int i)
{
return __builtin_expect(i, 7) == 7 ? 100 : 200;
}
I ten:
int foo(int i)
{
int j = __builtin_expect(i, 7);
return j == 7 ? 100 : 200;
}