Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

C99に関するdotsargのブックマーク (3)

  • 複合データ型(構造体など)のアラインメント(alignment)について

    C言語で利用するsizeof(x)はxの正味のサイズではなく、 xのアラインメントの倍数に切り上げた値になる。 基的なデータ型のアラインメントは、下に示すようにその型のサイズ に一致することが多い。 例外もあるのだが(詳しくはこちらを参考)、ここではとにもかくにも一致するとする。 では、複合データ型(構造体など)では具体的にどういったサイズになるのであろうか。 例題を使って考えてみよう。 ◆ 基的なデータ型のアラインメント 構造体のアラインメントを考える前提として、 先にも述べたように、各データ型のサイズとアラインメントは以下とする。 ・char サイズ          : 1バイト アラインメント : 1バイト ・short サイズ          : 2バイト アラインメント : 2バイト ・int サイズ          : 4バイト アラインメント : 4バイト ・dou

  • 64ビットプログラミングのポイント

    64ビット環境へ移行する際の注意点 ここでは、従来の32ビット環境に慣れてしまったプログラマがしばしば犯してしまうミスを交えつつ、32ビット環境から64ビット環境へ移行する際に注意すべき代表的なC言語のプログラミング例を紹介します。 もちろん、32ビット環境でプログラムを書いたことのないプログラマにも有用な情報です。 ポインタをint型やlong型変数に代入しない ポインタをint型やlong型変数に代入し、それを操作してはいけません。 アセンブラまたはインラインアセンブラを使った経験のあるプログラマは、C言語のポインタを整数型変数に代入してアドレスの計算を行うようなコードを書くことがあります。例えば、List1のようなコードです。 long a[N]; long *p; long addr; ... addr = (long) a; addr += sizeof(long) * x; /

    64ビットプログラミングのポイント
    dotsarg
    dotsarg 2014/04/24
    アラインメントの説明が掲載されている。
  • C言語関数辞典 - C言語Tips集 小数点以下を四捨五入する

    ただし,上記の関数はいずれも C99 で規定されている関数です. コンパイラが C99 に対応していなかったり,コーディング規約上 C99 を禁止している場合は,他の方法で四捨五入をする必要があります. そこで,ここでは round 系の関数を使わずに四捨五入を行う方法を 2 つ紹介します. 方法1. 0.5 を足してから小数点以下を切り捨てる 浮動小数点数に 0.5 を足してから小数点以下を切り捨てれば四捨五入することが可能です. C言語には床関数 (floor function) を計算する floor という関数が用意されていますのでこれを利用します. ただし,単純にこれをやってしまうと,負の浮動小数点数の場合に四捨五入することができません.負の浮動小数点数も扱う場合は場合分けが必要になります. 具体的には以下のように実装します. /** * 0.5を足してから切り捨てることで小数点

  • 1