C言語ソースのifdefを削除するツール
題名の内容をググったら下記の記事を見つけた。
cpp-tools - Cソース中の大量のifdefを読みやすくしたい(ツール探索編) - spikelet days
記事中のツールで手に入るものはunifdefのみっぽい。
unifdefを下記から入手
unifdef - selectively remove C preprocessor conditionals
上記の記事とはバージョンが違うので、再確認
結果としては、このツールで問題ない。
上記の記事で問題とされた内容は新しいバージョンでは対応されている。
例5,6以外は下記を実行
unifdef -DA -UB ファイル名
例1
#ifdef A "A is defined"; A; #else "A is not defined"; #endif "Finished.";
結果
"A is defined"; A; "Finished.";
例2
#ifdef A "A is defined"; A; #ifdef B "B is defined"; B; #else "B is not defined"; #endif #else "A is not defined"; #endif "Finished.";
結果
"A is defined"; A; "B is not defined"; "Finished.";
例3
#if defined(A) "A is defined"; A; #else "A is not defined"; #endif "Finished.";
結果
#if defined(A) "A is defined"; A; #else "A is not defined"; #endif "Finished.";
例4
#if defined(A) "A is defined"; A; #if defined(B) "B is defined"; B; #else "B is not defined"; #endif #else "A is not defined"; #endif "Finished.";
結果
"A is defined"; A; "B is not defined"; "Finished.";
例5
unifdef -k ファイル名
#if 0 "Inside zero"; #else "Outside zero"; #endif "Finished.";
結果
"Outside zero"; "Finished.";
例6
unifdef -k ファイル名
#if 1 "Inside one"; #else "Outside one"; #endif "Finished.";
結果
"Inside one"; "Finished.";
例7
#ifdef A "A is defined"; A; #elif B>1 "B > 1"; B; #else "B <= 1"; B; #endif "Finished.";
結果
"A is defined"; A; "Finished.";
例8
# ifdef A "A is defined"; A; # else "A is not defined"; # endif "Finished.";
結果
"A is defined"; A; "Finished.";