FloraIT情報とか雑多な情報とか。この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。C言語及びC++ではポインターと呼ばれる、そのメモリー領域のアドレスの場所を指し示す特有の機能があるが、それの計算等を行う際に往々にしてキャストが行われるが、その際に環境依存の問題を引き起こす危険性がある。これから述べたいのは、私が見たことのある例で、普通であれば絶対に問題を引き起こすものである。今回、私が遭遇したものは、以下のようなコードのものである。int)ptr;something(addr);上記のコードでは、ポインターの計算こそ行っていないものの、環境によってはバグに悩まされるコードの例である。getptr();で取得したアドレスの値、及びそれを格納するサイズは環境によって変わるからである。[1]WindowsやUNIX系OS、GNU/Linuxシステムなど、一般的な32bitアーキテクチャーで採用されているILP32の場合は問題ない。64bit環境では多くの場合バグが発生する危険性が高い。int型が32bit型のままであることで、キャストの際に値の一部が消失してしまうことがあることが原因である。これを防ぐには、適切な型に切り替える必要がある。C99以降及びC++11以降では以下のような書き方ができる。(uintptr_t)ptr;something(addr);こうすることによって、ポインターのサイズが扱える値が使えるため、問題が発生することが基本的になくなる。万一比較的古い仕様のC言語を使う場合でも、適切に#ifdef〜#endif及びtypedefを駆使することでほぼ同様のことは行える。C言語においてはこのように他の言語にはない落とし穴があるので、是非とも気をつけてほしい。Tomomiウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。References[+]References↑1WindowsやUNIX系OS、GNU/Linuxシステムなど、一般的な32bitアーキテクチャーで採用されているILP32の場合は問題ない。最初のプログラム前回では、Javaプログラミングをするために必要になる環境の構築について説明した。環境の構築に成功すれば、プログラミングの学習の準備ができたわけなので、この項から実際にプログラミングの学習を進めていきたい。IT/Computerフロッピーはオワコンになった今となってはもはや使われなくなったメディアとして、フロッピーディスクが挙げられる。これはメーカーやベンダーによっては「ディスケットディスク」や「フロッピィディスク」などとも呼ばれることもある。7でも改良が加えられているSwiftだが、それを使って開発が可能なのはアプリまたはフレームワークであり、ライブラリー開発には使えない。8以降では従来のBIOSでブートしているのか、それともモダンなUEFIでブートしているのかを起動時に確認することが比較的容易になっている。ここではブートの種類を判別する方法の一つ...Diary最近はウェブ上でプログラミングできるようになった最近は簡単なプログラムを作って動作検証をするだけなら誰でもウェブ上でプログラミングができるようになった。私もpaiza.ioを利用しているが、簡単にチェックするだけなら、かなり便利である。恋するハッカソン〜君色に染まるアイドル〜』(以下、POH8)の回答例について、Swift2版も順次作成を行なっている。コメントトップサイドバータイトルとURLをコピーしました。