0

CでCプリプロセッサを実装しています...

私は3つの機能を持っています:

  1. トライグラフ置換機能
  2. 回線継ぎ機能
  3. コメント削除機能

ただし、これらの関数はファイルに対して個別に機能します。

最初の関数はファイルを受け取り、出力として temp-file1 を生成するトリグラフを置き換えます

2 番目の関数は、入力として temp-file1 を受け取り、行を接合して別の temp-file2 を生成します。

3 番目の関数は、temp-file2 を入力として受け取り、コメントを削除して、さらに別の temp-file3 を生成します。

これで、主要な前処理タスクが temp-file3 で実行され、.i ファイルが最終出力として生成されます。

今、私には3つのオプションがあります:

  1. 一時ファイルを使用する
  2. パイプを使う
  3. 中間一時ファイルまたはパイプの代わりに文字列を使用します (つまり、一時ファイル 1、2、および 3 全体が 3 つの大きな文字列になります!!)

3つ疑問が…

  1. オプション 1 はオプション 2 よりも効率が悪いようです
  2. オプション2は完璧に思えますが、名前のないパイプのサイズによって制限されますか? (単一のプロセス、つまり関数 1 2 & 3 が次々に呼び出されるため) 一時出力サイズ > パイプの総容量の場合はどうなりますか?
  3. オプション 3... 前の 2 つよりも効率的で簡単ですか?

どのオプションを選択すればよいか教えてください。

4

1 に答える 1

0

オプション 2 は、一部の C コンパイラの実装方法だと思います。C プリプロセッサは C コンパイラにパイプし、C コンパイラはアセンブラにパイプします。プロセスは順次ではなく同時に実行されるため、パイプ バッファーのサイズは問題になりません。パイプは、生産者と消費者の関係で従来の FIFO キューを実装します。

于 2013-03-28T04:34:33.360 に答える