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;
}

questionAnswers(1)

yourAnswerToTheQuestion