C では、条件式は左辺値またはその結果ではありません。
一方のオペランドの型 | もう一方のオペランドの型 | 結果の型 |
---|---|---|
算術 | 算術 | 通常の算術変換後の算術型 |
構造体または共用体型 | 互換構造体または共用体型 | 両方のオペランドにすべての修飾子が付く構造体または共用体型 |
void | void | void |
互換型を指すポインター | 互換型を指すポインター | 型に指定されたすべての修飾子が付く型を指すポインター |
型を指すポインター | NULL ポインター (定数 0) | 型を指すポインター |
オブジェクトまたは不完全型を指すポインター | void を指すポインター | 型に指定されたすべての修飾子が付く void を指すポインター |
GNU C の場合、条件式は、その型が void
でなく、分岐がともに有効な左辺値であれば、有効な左辺値となります。次の条件式 (a ? b : c)
は、GNU C では有効となります。
(a ? b : c) = 5 /* Under GNU C, equivalent to (a ? b = 5 : (c = 5)) */
この式は、いずれかの拡張言語レベルにおけるコンパイルで使用可能です。
関連参照