2010-09-21 13 views
13

Wenn ich einen Typ größer als int mit einer Integer-Konstante vergleiche, sollte ich die Konstante auf der linken oder rechten Seite platzieren, um sicherzustellen, dass der richtige Vergleich durchgeführt wird?Yoda Bedingungen und ganzzahlige Förderung

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

oder sollte es sein:

if (-1 == i) 

Gibt es Umstände, unter denen entweder Fall zum Vergleich nicht identisch ist mit -1LL (wo int64_t ist long long)?

+5

yoda war ein tolles Tag :) –

+4

ein tolles Tag Yoda war :-) –

Antwort

11

Es spielt keine Rolle, ob Sie es auf der rechten Seite oder auf der linken Seite platzieren; Der Operator == ist vollständig symmetrisch.

Wenn beide Operanden zum Operator == einen arithmetischen Typ haben, wie in diesem Fall, dann werden die "üblichen arithmetischen Konvertierungen" angewendet (C99 §6.5.9). In diesem Fall wird die Regel gilt, ist:

Wenn beide Operanden haben Integer-Typen unterzeichnet oder beide Integer-Typen, die Operanden mit der Art der geringeren ganzzahligen Umwandlung Rang ist auf den Typ des Operanden umgewandelt unsigned mit höherem Rang. (C99 §6.3.1.8)

So ist die -1 auf int64_t umgewandelt. -1LL macht keinen Unterschied.

+0

Fantastisch, genau das, was ich wissen wollte. –

+15

Zusätzlich zur Antwort: Der übliche Grund, die Konstante an die erste Stelle zu setzen, besteht darin, Tippfehler zu finden: Wenn Sie '==' als '=' vertippt haben, dann wird der Compiler beschweren, dass Sie keine Konstante zuweisen können. Umgekehrt (konstant auf der rechten Seite) ist eine Beschwerde des Compilers nicht gewährleistet. –

Verwandte Themen