---------------------------------------------------------------------

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言語の文法に合わなくなっ てしまった場合のみである。 特に

#define NUMBER(X) { int a; for( a='0' ; a<=X ; a++) putchar(a);}
tex2html_wrap2631
puts("Print Numbers");
NUMBER('9')
putchar(' tex2html_wrap_inline2641 n');

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

---------------------------------------------------------------------

プログラムのPAD図自動描画ソフト pad2ps に戻る。
吉田 誠一のホームページ に戻る。
Copyright(C) Seiichi Yoshida (comet@aerith.net). All rights reserved.
Sat Nov 9 21:27:17 JST 1996