アカウント名:
パスワード:
ポインタ変数を定義し、それをアセンブラコードで初期化してしまうんだ! (^o^)/
多分、warning を「減らす」方法は似たようなもので、全部変数定義にして、その変数へ値を代入する関数を一か所にまとめるとか、そういう類ではないかと。
たぶん、コンパイラがアドレスを即値で使うことを期待してのマクロだと思うので、パフォーマンスが気になります。それに結構な数のI/Oがありましたから、ポインタ変数の格納場所が馬鹿にならないかと。
どうすればいいか結構考えたんですけど、なかなかうまくいかなかった記憶があります。
…ふと思ったんだが。NULL を char * にキャストして、それに「アドレス」を足したらどうだったんだろう…
# 多分「固定値をアドレスに足す」のは問題ないよね。
「NULL」が、アドレスとして 0x00000000 でない場合、まずそれを補正する必要が出てしまいますが、多分それはマクロで一定のオフセットを加えるように指定すればなんとかなるはずで…
dodongaです
NULLは アドレスとしての 0 ではないです。 足し算引き算してもダメです。
#okky さんらしくない誤謬です。
NULLは アドレスとしての 0 ではないです。
それは「純粋なる概念としてのC言語」だけの世界の話でしかありません。
つまり、「どのような環境に持って行ってもうごくCで書かれたプログラム」を書きたければ、NULLを特定アドレスと仮定してはいけない(アドレスとして固定されると仮定することすらしてはいけない)。
しかし、この問題は「組み込み用コーディングであり、絶対アドレスを数値指定する」という前提があります。なので、NULLは「何かしらのビット列で表現される固定アドレス」と想定して良いのです。
で、「
どちらにしろ、「ポインタのアドレス直打ち」はNULLに限らずC言語として気持ち悪いのは確かですね。
okkyさんの言うようにこの話題は特定処理系に限定したほうがいいと思います。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日本発のオープンソースソフトウェアは42件 -- ある官僚
アセンブラを使うんだ、ルーク (スコア:1)
ポインタ変数を定義し、それをアセンブラコードで初期化してしまうんだ! (^o^)/
多分、warning を「減らす」方法は似たようなもので、全部変数定義にして、その変数へ値を代入する関数を一か所にまとめるとか、そういう類ではないかと。
fjの教祖様
Re: (スコア:1)
たぶん、コンパイラがアドレスを即値で使うことを期待してのマクロだと思うので、パフォーマンスが気になります。
それに結構な数のI/Oがありましたから、ポインタ変数の格納場所が馬鹿にならないかと。
どうすればいいか結構考えたんですけど、なかなかうまくいかなかった記憶があります。
Re: (スコア:1)
…ふと思ったんだが。
NULL を char * にキャストして、それに「アドレス」を足したらどうだったんだろう…
# 多分「固定値をアドレスに足す」のは問題ないよね。
「NULL」が、アドレスとして 0x00000000 でない場合、まずそれを補正する必要が出てしまいますが、多分それはマクロで一定のオフセットを加えるように指定すればなんとかなるはずで…
fjの教祖様
NULLはアドレスではないです (スコア:1)
dodongaです
NULLは アドレスとしての 0 ではないです。
足し算引き算してもダメです。
#okky さんらしくない誤謬です。
閑話休題
Re: (スコア:1)
それは「純粋なる概念としてのC言語」だけの世界の話でしかありません。
つまり、「どのような環境に持って行ってもうごくCで書かれたプログラム」を書きたければ、NULLを特定アドレスと仮定してはいけない(アドレスとして固定されると仮定することすらしてはいけない)。
しかし、この問題は「組み込み用コーディングであり、絶対アドレスを数値指定する」という前提があります。
なので、NULLは「何かしらのビット列で表現される固定アドレス」と想定して良いのです。
で、「
fjの教祖様
Re:NULLはアドレスではないです (スコア:1)
どちらにしろ、「ポインタのアドレス直打ち」はNULLに限らずC言語として気持ち悪いのは確かですね。
okkyさんの言うようにこの話題は特定処理系に限定したほうがいいと思います。