6

動作が異なる理由を説明してください。

  int main() {
    int p;
    p = (printf("stack"),printf("overflow"));
    printf("%d",p);
    return 0;
  }

これにより、出力がstackoverflow8になります。ただし、paranthesisを削除すると、次のようになります。

p = printf("stack"),printf("overflow");出力を次のように与えますstackoverflow5

4

1 に答える 1

13

コンマ演算子

コンマ演算子は代入よりも優先順位が低いため(この点ではどの演算子よりも優先順位が低くなります)、括弧を削除すると、代入が最初に行われ、2番目の式の結果が破棄されます。それで...

int a = 10, b = 20;
int x = (a,b); // x == 20
int y = a,b;   // y == 10
// equivalent (in terms of assignment) to
//int y = a;

3行目は、の再宣言として解釈されるため、エラーが発生することに注意してくださいb

int y = a;
int b;

私は最初これを逃しました、しかしそれは理にかなっています。との最初の宣言と同じですabこの場合、コンマは演算子ではなく、区切り文字です。

于 2012-07-16T18:58:04.630 に答える