C言語なら、俺に聞け! <19>
■ このスレッドは過去ログ倉庫に格納されています
0596567
NGNG576は勘違いでした。お騒がせしました。
>>571
> ファイルの上から順に、単純に文字列置換していくだけでいいのでは?
とりあえずいろいろ試して#defineの仕組みがだいたいわかってきたので参考までに。
どうやら上から順番に置換していくわけではないようです。
ちなみに#defineの行の自体は他の#defineにより置換されることはないようです。
例えば次の例を使うと
int a = 1;
int b = 2;
#define b a + b
#define a a + b
printf("%d", a);
まず、#defineの第1字句がaと一致するものを検索して置換します。
a → a + b
そしてこの#defineにフラグを立てます。一度使った#defineは置換完了まで再び使われません
次にこのaとbに対して再び置換を試みます。
a の#defineはさっき使ったのでもう使用不可です。そこで b に対してのみ置換が行われます。
a + b → a + a + b
そしてこの#defineにもフラグを立てます。
次にこのaとbに対して置換が試みられます。もう使用できる#defineはないのでここで終了です。
こうやって使用できる#defineがなくなるか、もしくは
どの字句も全ての#defineの1字句目と一致しなくなれば終了です。
この方法だと#defineする順番を入れ替えても同じ結果が出ます。
■ このスレッドは過去ログ倉庫に格納されています