C/C++
Submitted by ikeda on 2009, July 1 - 11:05pm.
Submitted by fujiwara on 2008, June 23 - 2:13pm.
Tagged: C/C++
例えば、 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)このマクロは、以下のようにして使用します。
Submitted by fujiwara on 2008, January 21 - 5:08pm.
スクリプト言語や Java が隆盛を極めている昨今の風潮からすると、 あまり流行りでは無いのかもしれませんが、 弊社では C 言語による(そこそこの規模の) 開発案件もコンスタントに手掛けています。
そういった案件で既存のソース(あるいは利用するライブラリ) の調査を行う場合、 文字列ベース(e.g.: grep 結果)ではなく、 C 言語としての文法解釈を経て得られる情報が必要となることもあります。 例えば、 連結操作("##")マクロによるシンボル定義はコード上からは見えない、 といった問題があるためです。
今時は C 言語の字句解析用定義(所謂「lex ソース」) も構文解析用定義(所謂「yacc ソース」ないし「BNF 定義」) も入手可能なのですが、 ではこれだけあれば C 言語のソースを解析可能かというと、 実はそうではありません。