next up previous contents
Next: C++ Up: プログラムから直接PAD図を描く Previous: プログラムから直接PAD図を描く

C

   

C言語のプログラムからPAD図を直接描くには、 % pad2ps -c foo.c > foo.ps

とする。 但し、拡張子が .c のファイルを変換する場合には -c  オプションは省略できる。

C言語のパーサは、 c2pad  である。 これを直接起動してプログラムをPADELに変換するには、 % mkpad -c foo.c > foo.pad

とする。この場合は -c オプションは省略できない。

C言語のプログラムは、各関数ごとにPAD図を描いていく。 各関数名がそれぞれのPADのタイトルになる。 また、関数の外にある大域変数はすべて読み捨てられる。 関数内でも、 -O  オプションを指定すると、初期化していない 変数宣言は読み捨てることができる。

デフォルトでは、文末の ; (セミコロン)はPAD図には出力しないが、これは -semicolon  オプションで出力させることもできる。

C言語のプログラムを変換する上で最も注意すべきなのは、 #ifdef など のプリプロセッサによる条件コンパイルを制御する部分である。 あるプログラム foo.c のPAD図を描かせるとしよう。この foo.c をコンパイルする時、もしも

% gcc foo.c -DJAPANESE

と、 -DJAPANESE を指定しているとすれば、 pad2ps シリーズでPA D図を描かせる時も、

% pad2ps foo.c -D JAPANESE > foo.ps

のように、 -D  オプションを使って定義してやる必要があるだ ろう。 この時、指定形式がCコンパイラとは少し違うので注意して欲しい。

ところが、Cコンパイラはわざわざ指定しなくても、その環境や機械ごとにデフォ ルトで定義するものがいくつかある。 また、 pad2ps シリーズは #include <stdio.h> など を無視するので、ヘッダファイル内で定義されているものも見落としてしまう。 そこで、定義すべきシンボルはすべて -D オプションで指定してやるべき である。 その際、 -ifdef  オプションを使って、

% pad2ps foo.c -ifdef

としてやれば、定義することでプログラムが変化するシンボルの一覧を出力して くれるので、その中から適当に定義してやればよい。

C言語のプログラムは、ほとんどのもののPAD図を描かせることができるだろ う。 現在変換できないのは、マクロを使っていて見かけ上C言語の文法に合わなくなっ てしまった場合のみである。 特に


のように、; (セミコロン)で終了していなくてエラー、という場合が多い。 そのような時は、仕方ないので手で修正してやるしかない。 エラーにならなくても、たまたまうまくいっただけで、PAD図の形が変になっ ている、という可能性もある。 結局、マクロを大いに利用しているプログラムを変換する場合には、よく注意す るしかない。



Masayuki Kuwada
Fri Nov 8 15:33:42 JST 1996