Koşullu İfade İşleci
C'nin bir üçüncül işleci vardır: koşullu ifade işleci (? :
).
Sözdizimi
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
tam logical-OR-expression
sayı, kayan veya işaretçi türüne sahip olmalıdır. 0'a denkliği açısından değerlendirilir. Bir sıra noktası izler logical-OR-expression
. İşlenenlerin değerlendirilmesi aşağıdaki gibi devam eder:
0'a eşit değilse
logical-OR-expression
değerlendirilirexpression
. İfadenin değerlendirilmesinin sonucu, sonlandırıcıexpression
olmayan tarafından verilir. (Bu, yalnızca doğru olduğundalogical-OR-expression
değerlendirildiğini gösterirexpression
.)0'a eşitse
logical-OR-expression
değerlendirilirconditional-expression
. İfadenin sonucu değeridirconditional-expression
. (Bu, yalnızca false olduğundalogical-OR-expression
değerlendirildiğini gösterirconditional-expression
.)
Etki, ya da expression
conditional-expression
değerlendirilir, ancak her ikisini birden değil.
Koşullu işlemin sonucunun türü, veya conditional-expression
işleneninin türüne expression
bağlıdır:
Tamsayı veya
conditional-expression
kayan türe sahipseexpression
(türleri farklı olabilir), işleç normal aritmetik dönüştürmeleri gerçekleştirir. Sonucun türü, dönüştürmeden sonra işlenenlerin türüdür.Her ikisi de
expression
conditional-expression
aynı yapıya, birleşime veya işaretçi türüne sahipse, sonucun türü aynı yapı, birleşim veya işaretçi türüdür.her iki işlenenin türü
void
varsa, sonuç türünevoid
sahiptir.İşlenenlerden biri herhangi bir türde bir nesnenin işaretçisi, diğer işlenen ise işaretçi ise
void
, nesnenin işaretçisi işaretçisinevoid
dönüştürülür ve sonuç öğesine yönelik bir işaretçidirvoid
.expression
veyaconditional-expression
bir işaretçiyse ve diğer işlenen 0 değerine sahip bir sabit ifadeyse, sonucun türü işaretçi türüdür.
İşaretçiler için tür karşılaştırmasında, işaretçi noktalarının önemsiz olduğu türdeki tüm tür niteleyicileri (const
veya volatile
) ancak sonuç türü niteleyicileri koşullunun her iki bileşeninden de devralır.
Örnekler
Aşağıdaki örneklerde koşullu işlecin kullanımları gösterilmektedir:
j = ( i < 0 ) ? ( -i ) : ( i );
Bu örnek için mutlak değerini i
j
atar. 0'dan küçükse i
, -i
öğesine j
atanır. 0'dan büyük veya buna eşitse i
, i
öğesine j
atanır.
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
Bu örnekte, iki işlev ve f1
f2
ve ile iki değişken x
y
bildirilir. Programın ilerleyen bölümlerinde, iki değişken aynı değere sahipse işlev f1
çağrılır. f2
Aksi takdirde çağrılır.