Могу ли я использовать 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;
}