2010-12-17-01-SVG と UML の話 - 18
>> Site top >> weblog >> 月別アーカイブ >> 2010年12月のlog >> 2010-12-17-01-SVG と UML の話 - 18
最終更新日付:2010/12/17 01:00:00
SVG と UML の話 - 18
2010 年 12 月 17 日
書くことが減ってきたので、半分デバッグ目的な機能の話。
以前から書いている通り、このツールでは実際の(コンパイルと呼んでいる)変換処理に先立ってプリプロセス処理が実行される。おおまかには、以下のことだ。
- #include によるヘッダファイルのインクルード
- #define によるシンボルの展開
- #ifdef ブロックによる条件付きコンパイルの処理
- #defmacro によるマクロの展開
で、開発をしているとプリプロセスの結果を確認する必要が出てきた。何か問題が起きた時、プリプロセスに問題があるのかコンパイルに問題があるのかを判別するのが楽になるからだ。そこで、実行時オプションとしてプリプロセス後の状態を出力できるようにした。
それとは直接関係しない話だが、プリプロセス処理が複雑になるにつれ、困った事態が起きていた。このツールは入力ファイルの内容にエラーがあればそれを報告するようになっているが、#include や #ifdef ブロックを使っていると、単純に入力ストリームの何行目かという報告では意味がなくなってしまうのだ。まぁ当たり前といえば当たり前の話ではある。
この問題に対処するために、プリプロセス処理の出力に『この行はどのファイルの何行目か』という情報を入れるようにした。これは #include や #ifdef など、ファイル名が変化したり行番号が連続しなくなる局面でプリプロセス後の出力に差し込まれる。コンパイル処理では、この情報を見つける度に現在位置の情報を更新し、エラー出力時に正しいファイル名と行番号が出力できるようにしている。
書くまでもないことだろうが、この対処も自分の頭から生まれたものではない。C/C++コンパイラのプリプロセッサ出力を見て覚えたことを真似ているだけだ。一般に広く受け入れられている手法には大抵模倣するだけの価値があるし、少なくともそれを検討する必要はある。それで事足りるなら、同じ方法を使うのが一番良い。
コメント
このページのタグ
Page tag : 開発
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.