2008-02-01から1ヶ月間の記事一覧
目的 ある実行ファイルの動作に、どの共有ライブラリが必要かを把握したい。 ストレート環境であれば /bin/ldd を使えば良い(BINARY HACKS, HACK #7 を参照)のだが、クロス環境だと一々実行するのが面倒臭い。 一括で、必要なライブラリ一覧を得る方法は無い…
目的 Test::Unitでassertに失敗したときに表示されるメッセージを、unified diff形式で表示したい。 配列や文字列を操作するメソッドをテストしたときの表示が、 <"A\nB\nC\n"> expected but was <"A\nC\nD\n">. となるよりは、 --- expected +++ actual A -…
目的 コマンドの実行時間を手軽に測りたい。 処理時間が短い場合のために、コマンドを複数回まとめて実行した結果を計測する システム状態によるバラツキを考慮して、複数回の試行の平均を取る(その際、最大値と最小値を除く) 結果 上記仕様を満たすユーテ…
目的 "getopt"は、Cライブラリもコマンド版も、どちらも使い方を覚えにくい。 ここでは、コマンド版 "getopt" と、sh/bash built-in の "getopts" の使い方をまとめる。 結果 sh/bash built-inのgetoptsが使える場合は、そちらを使った方が良い。 外部コマン…
目的 #ifdefが複雑にネストしているCソースファイル中で、どの部分が有効かを簡単に調べたい。 背景と動機については id:taiyo:20080202#p1 などを参照。 Cプリプロセスの部分適応ツールについては昨日(id:taiyo:20080204#p1)試したので、今回はそれ以外に…
目的 #ifdefが複雑にネストしているCソースファイル中で、どの部分が有効かを簡単に調べたい。 背景と動機については id:taiyo:20080202#p1 などを参照。 結果 C FAQ(Question 10.18)で紹介されている3つのツールと、手元にあったツール1つを試した。 名前 …
目的 未定義のマクロが、Cプリプロセッサの条件行でどう扱われるかを確認する 結果 未定義マクロXは、以下のように展開される。 defined(X) => 偽(結局は数値の0) マクロ展開 => 数値の0
目的 Cプリプロセッサでのマクロ展開は、再起的に可能か? 結果 不可能。一度展開したマクロは、展開結果にその内容が含まれていても、それ以上展開されない。 (Self-Referential Macros - The C Preprocessorに書かれている通りだった)
目的 Cプリプロセッサで、#if の行内で使える演算子がなにかを、漏れなく把握したい。 K&Rやウェブ検索では、適切に見つけられなかった。 結果 以下の演算子が使用可能(gcc-3.4.6の場合): 演算子 結合規則 備考 defined X (不明) (Xの前後に一重のみカッ…
結果のみ C言語では以下が定義されている(はてな記法の制限のため、'|'だけ2バイト文字で表記している)。 演算子 結合規則 備考 () [] -> . 左から右 ! ~ ++ -- + - * & (type) sizeof 右から左 (単項演算子) * / % 左から右 + - 左から右 > 左から右 >=…
目的 Cのソースファイル中で、どの #ifdef が有効なのかを調べるために、そのソース内でのdefine済みマクロ一覧を簡単に取得する。 結果 gccのwrapperを作ることで実現できた。 オリジナルコマンドのファイル名をgcc-origに変更する マクロ表示用gccラッパー…
目的 コマンドラインでターゲットを指定せずにmakeを実行したとき、ビルドされるのはMakefileの最初に定義されたターゲットになる。 この「デフォルトターゲット」を、Makefile内で任意のものに変更したい。 結論 GNU Make 3.81(かそれ以降)を使って、.DEFAU…