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

CとC++は似たようなモノか?」記事へのコメント

  • 門外漢だけどさ。(プログラムなんてExcel VBAしかやったことねーっつーの)
    なんでCの次(?)をC++にしたわけ?
    Cの次は普通Dだろ?Dから進んだらEじゃないか。
    それをC++だのObject-CだのC#だのと…。

    永久Betaのサービスとか、すでにたくさん使われてるのに未だにVersion が1以下のソフトとか、ある日突然バージョンがどかんとあがるソフトウエア並にわかりにくい!
    もしくはWindows Vistaのエディションの数とか、Linuxのディストリビューションの関係とか並にわかりにくい。

    #単なる言いがかりなのでAC
    #まぁふさわしくないコメントだってのはわかってますはい。

    • by Anonymous Coward
      個人の感想なぞどうでもよいが、
      C言語で C++ と書くと 変数Cの値が1増やすという意味になります。
      • > C言語で C++ と書くと変数Cの値が1増やすという意味になります。
         

        if( C == C++ ){
          /* C も C++ も一緒! */
        } else {
          /* "C/C++" はけしからん! */
        }

        親コメント
        • by Anonymous Coward
          コンパイラ「最適化したら見えない」
        • > C言語で C++ と書くと変数Cの値が1増やすという意味になります。(単項演算子の位置はその位置による動作の違いをかかねば…)

          elseに飛ばしたければ

          int C = 1;
          if( C == ++C ){
          ; /* こっちにはこない */
          } else {
            ; /* こっちにくる */
          }
          /* この位置でのCの値はいずれも2 */       
          わかっちゃいるけど、間違えそうなので、評価時の単項演算子の使用はつい避けてしまう……

          • #1566914 [srad.jp] のプログラムも #1566926 [srad.jp] のプログラムも、 C 言語標準では結果は未定義であり、 if 文のどちら側が実行されても、どちらも実行されなくても、実行が終わった後なぜか変数 C の値が 42 になっていても、実行時エラーになっても、コンパイルエラーになっても、文句は言えません。 C FAQ 3.1, 3.2, 3.3, 3.8, 3.9 [kouno.jp], 11.33 [kouno.jp] を参照してください。 C++ 言語標準でも、 C FAQ 3.8 の説明とは少し違う説明が必要ですが同様に未定義です。

            どのような場合に結果が未定義になるかという正確な条件は、僕は理解していないので知りたければ言語仕様を読んでください。式の中のある箇所で変数の値を変更し、同じ式の中の別の箇所で同じ変数の値を参照すると、二つの箇所の評価順が言語仕様で決まっている場合を除き未定義になる、と思っておけば、そうそう間違ってはいないと思います。両方とも変更でも同様です。

            親コメント
            • C == C++ の場合は、(C++)に関してインクリメントの前に評価を実施します。そのため、C == C++は真となることが言語的に保証されています。
              C FAQ 3.2 [kouno.jp]で記述があるインクリメンタル演算子を使った場合の未定義というのは、書き換えを実施する文を複数含む場合の振る舞いが定義されていないということです。
              (ですので、C == C++ ではなく、C = C++ なら、未定義になります)

              たとえば、C FAQ 3.2 [kouno.jp]で示されている (i++ * i++)に関しては、次のように評価されます。
              ・右のi++のインクリメントを実施する前に、右のi++の評価を実施します。
              ・左のi++のインクリメントを実施する前に、左のi++の評価を実施します。
              ・右のi++のインクリメントを実施する前に、左のi++の評価を実施するかどうかは定義されていません。
              ・左のi++のインクリメントを実施する前に、右のi++の評価を実施するかどうかは定義されていません。

              このコードは定義されていない部分の実装によって結果が変わるので、「あいまいなコード」であると言えます。そのため、このコードは未定義と判断されます。
              親コメント
              • って、嘘書いた orz

                C == C++ のインクリメンタルが、左辺のCの評価の前に実施されるかどうか定義されていませんね。
                なんで、投稿する前に気づかないんだろ。 orz

                失礼しました。
                親コメント
              • by Anonymous Coward
                それとは全く別の話で、

                代入演算子が書き込む変数を、代入する値の計算以外に読み出すのは未定義

                というのがあります。つまり、

                C == C++

                は、左辺で読んだ変数Cの値を比較に使っていますので未定義になります。
        • by Anonymous Coward

          >C == C++
          これって未定義動作になりませんか?
          大丈夫でしたっけ?

          • >> C == C++
            > これって未定義動作になりませんか?

            その未定義なことについて議論するのが
            このストーリーのお題ですよ(違) ;-P
            親コメント
            • by Anonymous Coward
              未定義って事は、いつかは定義されるんでしょうか?

              # "未定義"についての議論ではない?
          • by Anonymous Coward
            「が」と「を」を書き換えるのを忘れたACですが。
            左辺と右辺のどちらの評価を先にするという事が 文法上定義されていない限り、結果は未定義でしょう。

計算機科学者とは、壊れていないものを修理する人々のことである

処理中...