C/C++
Tagged:  •    •  

色々なツールが存在しますが、その中の1つにcscopeがあります。特にemacsのようなエディタと組み合わせて使用すると、大変快適にソースをブラウズすることができます。

実際にlinuxカーネルのソースを読む時のcscopeの使用方法については、ここが参考になりますし、他にも色々と書いている人はいるのですが、最新のソースではディレクトリ構成も異なりますし、emacsから利用する場合の設定も幾つかまとめておきたいので、書いてみました。

Tagged:

例えば、 C/C++ で開発を行っている現場であれば、 以下のようなマクロが1つや2つや3つや4つや N 個は有るのではないでしょうか。

#ifdef DEBUG

extern int debug_level;

/* 閾値以下のレベル値の場合に、式 exp を評価するマクロ */
#define AT_DEBUG(level, exp) \
    if(level <= debug_level){ exp; }

#else

/* DEBUG マクロが定義されていない場合はコードを丸ごと除外 */
#define AT_DEBUG(level, exp) /* nop */

#endif    
AT_DEBUG() の定義 (1)

このマクロは、以下のようにして使用します。

Tagged:  •  

スクリプト言語や Java が隆盛を極めている昨今の風潮からすると、 あまり流行りでは無いのかもしれませんが、 弊社では C 言語による(そこそこの規模の) 開発案件もコンスタントに手掛けています。

そういった案件で既存のソース(あるいは利用するライブラリ) の調査を行う場合、 文字列ベース(e.g.: grep 結果)ではなく、 C 言語としての文法解釈を経て得られる情報が必要となることもあります。 例えば、 連結操作("##")マクロによるシンボル定義はコード上からは見えない、 といった問題があるためです。

今時は C 言語の字句解析用定義(所謂「lex ソース」) も構文解析用定義(所謂「yacc ソース」ないし「BNF 定義」) も入手可能なのですが、 ではこれだけあれば C 言語のソースを解析可能かというと、 実はそうではありません。

Syndicate content