条件式演算子
C 言語では、三項演算子として条件式演算子 ( ? :
) を使用します。
構文
conditional-expression
:
logical-OR-expression
logical-OR-expression
?
expression
:
conditional-expression
logical-OR-expression
には、整数型、浮動小数点型、またはポインター型を指定する必要があります。 この式は、0 に等しいかどうかが評価されます。 シーケンス ポイントは logical-OR-expression
に従います。 オペランドは次のように評価されます。
logical-OR-expression
が 0 に等しくない場合、expression
が評価されます。 この式の評価結果は、非終端のexpression
として与えられます (つまり、logical-OR-expression
が true の場合にのみexpression
が評価されます)。logical-OR-expression
が 0 に等しい場合、conditional-expression
が評価されます。 この式の結果はconditional-expression
の値です (つまり、logical-OR-expression
が false の場合にのみconditional-expression
が評価されます)。
結果として、expression
、conditional-expression
のいずれかが評価され、両方評価されることはありません。
条件演算の結果の型は、次のように、expression
または conditional-expression
オペランドの型に依存します。
expression
またはconditional-expression
が整数型または浮動小数点型の場合 (それぞれ型が異なる可能性があります)、この演算子は通常の算術変換を実行します。 結果の型は、変換後のオペランドの型です。expression
とconditional-expression
が両方とも同じ構造体型、共用体型、またはポインター型の場合、演算結果はそれと同じ構造体型、共用体型、またはポインター型になります。両方のオペランドが
void
型の場合、結果はvoid
型になります。一方のオペランドが任意の型のオブジェクトへのポインターであり、もう一方のオペランドが
void
へのポインターである場合、そのオブジェクトへのポインターがvoid
へのポインターに変換され、結果はvoid
へのポインターになります。expression
またはconditional-expression
のいずれかがポインターであり、もう一方のオペランドが値 0 の定数式である場合、結果はポインター型になります。
ポインターの型を比較する際、ポインターが指している型の型修飾子 ( const
または volatile
) は重要ではありません。ただし、結果の型は、条件式を構成する両方の要素の型修飾子を継承します。
使用例
次に、条件演算子の使用例を示します。
j = ( i < 0 ) ? ( -i ) : ( i );
この例では、i
の絶対値を j
に代入します。 i
が 0 未満の場合、-i
が j
に代入されます。 i
が 0 以上の場合、i
が j
に代入されます。
void f1( void );
void f2( void );
int x;
int y;
.
.
.
( x == y ) ? ( f1() ) : ( f2() );
この例では、2 つの関数 f1
と f2
、および 2 つの変数 x
と y
を宣言しています。 プログラムの後半では、これら 2 つの変数が同じ値の場合に f1
関数を呼び出します。 それ以外の場合は f2
を呼び出します。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示