パスワードを忘れた? アカウント作成
この議論は、espy (3615)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。

C言語のvwhile () の条件式にデクリメントではまった。」記事へのコメント

  • 範囲が狭いかも (スコア:4, 参考になる)

    by hetareDAIO (17407) on 2017年11月17日 7時39分 (#3313939) 日記

    単項演算子のルールは、前置修飾が「演算後の値で評価」、後置修飾が「演算前の値で評価」です。if()とかwhile()の中という覚え方をしていると、例えば

    代入:b = a++;

    関数の引数:val = func(a++)

    三項演算子:val = ( a++ > 10 ? b++: ++c );

    というケースなどで見落とす可能性があります。また、マクロ内での単項演算子とか複数出てきた場合の評価順序とかややこしい問題もありますので、お仕事では単項演算子を評価式内で使うことはコーディングルールで禁止しているケースもあります。老婆心ながらご注意を。

    --
    ほえほえ
    • by ktmizugaki (46208) on 2017年11月17日 15時07分 (#3314191) 日記

      j-- ⇒ jを1減らした後、減らす前の値を返す
      --j ⇒ jを1減らした後、減らした後の値を返す
      ってことだからね。j--が0になったときは、jは-1だなぁ。

      > while (条件式) ではカッコ内を処理してから…と思い込んでしまった。
      って、条件式は、「j--」であって、「j」ではないのだから、「カッコ内を処理してから」で間違っていない。

      --
      svn-init() {
        svnadmin create .svnrepo
        svn checkout file://$PWD/.svnrepo .
      }
      親コメント
    • by hahahash (41409) on 2017年11月17日 11時17分 (#3314056) 日記

      自分も単項演算子を評価式で書かないようにしてますね。

      で、普段使わないもんだから後評価と先評価がどっちか自信がなくて、
      ますます使わなくなる、という……

      親コメント

※ただしPHPを除く -- あるAdmin

処理中...