Могу ли я использовать GCC __builtin_expect () с троичным оператором в C

Руководство GCC показаны только примеры, где __builtin_expect () помещается вокруг всего условия оператора if.

Я также заметил, что GCC не жалуется, если я использую его, например, с троичным оператором или в любом произвольном интегральном выражении, даже если оно не используется в контексте ветвления.

Итак, мне интересно, каковы основные ограничения его использования на самом деле.

Сохранит ли он свой эффект при использовании в троичной операции, подобной этой:

int foo(int i)
{
  return __builtin_expect(i == 7, 1) ? 100 : 200;
}

А как насчет этого случая:

int foo(int i)
{
  return __builtin_expect(i, 7) == 7 ? 100 : 200;
}

И этот:

int foo(int i)
{
  int j = __builtin_expect(i, 7);
  return j == 7 ? 100 : 200;
}

Ответы на вопрос(1)

Ваш ответ на вопрос