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.";

今後書くことを考える

とりあえず、何を書くか。

われわれIT土方は主に昔のプログラム改修を行う。

今、自分が行っているのは20年前から延々と改修がされたプログラムの機能追加である。

このプログラムを今はやりのリファクタリングとやらで見やすくしようと思う。

その方法を今後書くとしよう。

 

予定

・不要なifdefを消したい

ネット上ではよくネタにされる改修前のソースをコメントアウトするという規約だが、この規約は現在も使用されている。当プロジェクトの規約でもこの規約はある。だが、とてつもなく見づらいので元請けに頼んで消していい許可をもらった。というわけで、コメントアウトするために使用されているifdefを消してみようと思う。

 

明日は、これを検討する。

IT土方

中小企業に入社して早10年、SIerの下請けの下請けとして働いてきたが成長した気が全然しない。

最近、自分のような存在はIT土方というらしいと聞いた。

PGとは認められないらしい。

ということで、PGを目指して勉強するためにブログを書こうと思う。

なぜブログかというと有名なPGはみんなソース書け、アウトプットしろというので素直にしたがってみる。

飽きやすい性分なので、いつまでつづくかわからないが、とりあえず1週間に1回は更新できればよしとしよう。最低でも1ヶ月に1回は更新しよう。いきなり目標が低くなってるが気にしない。

今日はここまで。