タグ

ブックマーク / www.kouno.jp (1)

  • C FAQ 3

    3.1: なぜ以下のコードはうまく動かないか。 a[i] = i++; A: i++は副作用をもたらす。つまりiの値を変更する。式の他のところで iが参照されているので、このことが未定義の振舞いを引き起こす (K&Rの言い回しではこの式の振る舞いは不定であると取れるが、C規 格は一段と厳しく未定義であるとしている。-- 質問11.33を参照のこ と)。 References: K&R1 Sec. 2.12; K&R2 Sec. 2.12; ANSI Sec. 3.3; ISO Sec. 6.3. 3.2: 私が使っているコンパイラでは以下のコードで49を出力する。 int i = 7; printf("%d\n", i++ * i++); 評価の順にかかわりなく、56を出力するのではないのか。 A: 後置増分演算子++も後置減分演算子--も元の値を返した後で、その演 算を行う。この"後"の

    orihime-akami
    orihime-akami 2009/06/03
    3-16 "*((condition) ? &a : &b) = complicated_expression;" に爆笑。確かに美しくはないわwww
  • 1