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

静的コードチェックについて」記事へのコメント

  • ポインタ変数を定義し、それをアセンブラコードで初期化してしまうんだ! (^o^)/

    多分、warning を「減らす」方法は似たようなもので、全部変数定義にして、その変数へ値を代入する関数を一か所にまとめるとか、そういう類ではないかと。

    --
    fjの教祖様
    • たぶん、コンパイラがアドレスを即値で使うことを期待してのマクロだと思うので、パフォーマンスが気になります。
      それに結構な数のI/Oがありましたから、ポインタ変数の格納場所が馬鹿にならないかと。

      どうすればいいか結構考えたんですけど、なかなかうまくいかなかった記憶があります。

      親コメント
      • …ふと思ったんだが。
        NULL を char * にキャストして、それに「アドレス」を足したらどうだったんだろう…

        # 多分「固定値をアドレスに足す」のは問題ないよね。

        「NULL」が、アドレスとして 0x00000000 でない場合、まずそれを補正する必要が出てしまいますが、多分それはマクロで一定のオフセットを加えるように指定すればなんとかなるはずで…

        --
        fjの教祖様
        親コメント
        •  dodongaです

           NULLは アドレスとしての 0 ではないです。
           足し算引き算してもダメです。

          #okky さんらしくない誤謬です。

          --
          閑話休題
          親コメント
          • NULLは アドレスとしての 0 ではないです。

            それは「純粋なる概念としてのC言語」だけの世界の話でしかありません。

            つまり、「どのような環境に持って行ってもうごくCで書かれたプログラム」を書きたければ、NULLを特定アドレスと仮定してはいけない(アドレスとして固定されると仮定することすらしてはいけない)。

            しかし、この問題は「組み込み用コーディングであり、絶対アドレスを数値指定する」という前提があります。
            なので、NULLは「何かしらのビット列で表現される固定アドレス」と想定して良いのです。

            で、「何かしらのビット列で表現される固定アドレス」であれば、それを char * にキャストして、適切な分だけ足すなり引くなりすれば「アドレス 0」になり、そこにさらに必要な値を足せば、必要な絶対アドレスになります。

            ---

            「NULLはアドレスとしての0ではない」
            は「特定処理系を考慮すれば 0 とは仮定できない」だけであって ( 0xFFFFFFFF になる処理系は確かにある)、「何かのアドレスになる」のは正しいのです。

            --
            fjの教祖様
            親コメント
    • by Anonymous Coward

      教祖様の額のような

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

処理中...