2008年1月31日のブックマーク (3件)

  • Cプログラミング診断室/管理は複雑に/パイト・オフセット

    構造体をいっぱい使いだすと、構造体の各メンバーが、構造体の先頭から何 バイト離れているか(バイトオフセット)が欲しくなることがよくあります。 このとき、どのように苦労してバイトオフセットを求めたかを示す絶好のプロ グラム例があります。exdef.h(リスト5−10)が構造体宣言で、exdef2.h (リスト5−11)がバイトオフセットをマクロに求めるものです。実際のファ イルは構造体の宣言が延々と並んでいるので、先頭の2つの構造体の部分まで を示します。 構造体のメンバーの名前が全部大文字になっているのは、マクロみたいで気 味が悪いですね。できれば小文字で、もっと長い名前にしたいものです。まあ、 今回はその辺りの書き方には目をつむることにします。 1 /*------------------------------------------------------*/ 2 /* (1) CA

    rero
    rero 2008/01/31
    構造体メンバのオフセットを算出するために XtOffset を使用.NULL を元に計算しているので,標準に準拠しているのかが何となく怪しい….
  • Manpage of OFFSETOF

    Section: Linux Programmer's Manual (3) Updated: 2008-07-12 Index JM Home Page roff page 名前 offsetof - 構造体のメンバーのオフセットを返す 書式 #include <stddef.h> size_t offsetof(type, member); 説明 offsetof() マクロは、フィールド member の 構造体 type の先頭からのオフセットを返す。 このマクロが有用なのは、 構造体を構成するフィールドのサイズは実装によって変化するし、 コンパイラによりフィールド間に挿入するパディングのバイト数も 違う可能性があるからである。 その結果、あるエレメントのオフセットは必ずしもそれより前の エレメントのサイズの合計とはならない。 member がバイト境界に位置していない場合 (すな

    rero
    rero 2008/01/31
    > offsetof() マクロは、フィールド member の構造体 type の先頭からのオフセットを返す。
  • gcc のデバッグ術

    Unix系コマンドラインユーザーのための、 gcc/g++/g77 による開発におけるデバッグ術を簡単に紹介します。 以下の内容は gcc 2.7.2.3 での動作は確認しています。 g++/g77 でも恐らくは通用すると思うのですが、 ひょっとすると異なる部分があるかもしれません。 筆者は g++/g77 の使用経験がないので、その場合は御容赦を願います。 実行前 キーワード「コンパイルオプション, -Wall, -O2, -O4」 まずは gcc にオプション opt'-Wall' を付けてコンパイルし、 警告がなくなるまでソースを修正します。 これは 常識 です。 次に opt'-O4 -Wall' でコンパイルします。 「未初期化変数の使用」の警告 (`foo' might be used uninitialized in this function) は、 opt'-O4' を付

    rero
    rero 2008/01/31
    > opt'-O4 -Wall' でコンパイルします。「未初期化変数の使用」の警告 (`foo' might be used uninitialized in this function) は、 opt'-O4' を付けないとチェックしてくれないようです。