Условия Йоды и поощрение целого ряда

При сравнении типа, большего чем int, с целочисленной константой, следует ли поместить константу слева или справа, чтобы обеспечить правильное сравнение?

int64_t i = some_val;
if (i == -1)

или должно быть:

if (-1 == i)

Существуют ли какие-либо обстоятельства, при которых любой случай не идентичен сравнению с -1LL (где int64_t есть long long)?

Ответы

Ответ 1

Не имеет значения, положите ли вы его с правой или с левой стороны; оператор == полностью симметричен.

Если оба операнда оператора == имеют арифметический тип, как в этом случае, тогда применяются "обычные арифметические преобразования" (C99 §6.5.9). В этом случае применяемое правило:

Если оба операнда имеют целочисленные типы или оба имеют unsigned целочисленных типов, операнд с типом меньшего целочисленного ранга преобразования преобразуется в тип операнда с большим рангом. (C99 §6.3.1.8)

Итак, -1 преобразуется в int64_t. -1LL не имеет значения.