パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

age=age++;」記事へのコメント

  • by Anonymous Coward

    age = ++age;
    じゃないと、age 増えないよね

    #たまたま、同じ不具合を直したばっかりなので

    • by Anonymous Coward

      「永遠の〇〇歳」の実装例って奴だろ。

      • by Anonymous Coward

        未定義≒処理系依存なので、さかのぼってみるのはどうだろう。

        • by Anonymous Coward on 2016年12月27日 20時31分 (#3136540)

          C言語の未定義と処理系定義はまったく違う。

          親コメント
          • by Anonymous Coward

            なるほど。JIS X 3010をちょっと覗いてみたけど、用語としては
            「処理系定義の動作」「未定義の動作」「未規定の動作」があって、
            今回のは未規定の動作にあたる、でよいのかな。
            実装上の選択肢はあるけれど天変地異が起こったりはしない、と。

            # なんか翻訳で用語がばらついてると落とし穴になりそう

            • 「未定義」(undefined): 何がおきるか、規格はまったく関知しないもの。
              「未規定」(unspecified): 実装(挙動)は何種類か考えられるけど、そのどれにするかについて規格は関知しないもの。
              「処理系定義」(implementation defined): 未規定のもののうち、言語処理系がどういう挙動を示すか明記したもの。
              この3つについて、翻訳でばらついてるようなものは見たことないですね。
              翻訳がばらつくような腐った書籍だと、そもそも未定義って言葉が出てくるとも思えないし。

              で、「age=age++;」は「副作用完了点までの間にageを2回変更している」ため「未定義の動作」です。
              「ageは1増えるか、変わらないか、そのどちらか」ではなく、もし「ageが元の値より減る」ような挙動を示したとしても、C言語の規格上は問題ありません。
              それどころか、鼻から悪魔が出ようがタイムトラベル [blogspot.jp]しようが何でもあり。

              #それにしても、age=age++はスラドで結構見かけるので、今からなツッコミだなと思いながら読んでたんですが、ちょっとググってみたらtorlyさんはここんとこ毎年書いてられるみたい [google.co.jp]ですね。

              親コメント
              • by Anonymous Coward

                JIS X 3010 が結構最近のつもりでいたので、それ以前に複数の翻訳で訳語が
                ばらけたんじゃないかと思っていたのですが、JIS X 3010 は 1993/10/01が制定なんですね。
                # 用語じゃなく訳語なことに気が付いた。

                で、話の流れから「未規定」のほうかと思っていたら「未定義」のほうですか!
                (TODO: ここに恐ろしいものの片鱗)
                やはり一般人は規格の細かいところにこだわるよりは、怪しいところに近づかないのがいいみたい…

長期的な見通しやビジョンはあえて持たないようにしてる -- Linus Torvalds

処理中...