0

重複の可能性:
C++ コンマ演算子

C言語のif文を見ていました。このような。

if (a, b, c, d) {

    blablabla..
    blablabla..

}

この if 文の意味は何ですか?

4

3 に答える 3

7

あなたが持っているのは、コンマ演算子の例です。4 つの式すべてを評価しますdが、ifステートメントを使用します。

以外の式dに副作用がない限り (a++たとえば)、それらは役に立ちません。ミニプログラムで動作しているのを見ることができます:

#include <stdio.h>
int main (void) {
    if (1,0) printf ("1,0\n");
    if (0,1) printf ("0,1\n");
    return 0;
}

出力:

0,1

ほとんどの人は、次のように、気付かないうちにこれを使用しています。

for (i = 0, j = 100; i < 10; i++, j--) ...

、、およびはi = 0、それぞれコンマ演算子を使用する 2 つの完全な式の構成要素です。j = 100i++j++

標準の関連部分は次のC11 6.5.17 Comma operatorとおりです。

構文:

expression:
   assignment-expression
   expression , assignment-expression

セマンティクス:

コンマ演算子の左側のオペランドは void 式として評価されます。その評価と右オペランドの評価の間にはシーケンス ポイントがあります。次に、右側のオペランドが評価されます。結果には型と値があります。

例:

構文で示されているように、コンマ演算子 (この節で説明されている) は、リスト内の項目を区切るためにコンマが使用されているコンテキスト (関数への引数や初期化子のリストなど) では使用できません。一方、括弧で囲まれた式内、またはそのようなコンテキストの条件演算子の 2 番目の式内で使用できます。関数呼び出しでは:

f(a, (t=3, t+2), c)

この関数には 3 つの引数があり、2 番目の引数の値は 5 です。

于 2012-05-09T07:08:32.617 に答える
4

コンマ演算子: a と b および c と d を順番に評価し、d の結果を返します。

于 2012-05-09T07:09:07.840 に答える
2

a、b、c、d の順に評価し、 の値をdの条件として使用しますif。他の 3 つは評価されますが、通常は副作用のためだけです。結果は破棄されます。

于 2012-05-09T07:10:09.513 に答える