あなたが理解していないことを正確に知らずに答えるのは簡単ではありませんが、私の非常に限られたCの経験を使ってとにかく試してみます.
プリプロセッサとは
プリプロセッサは、コンパイル前にコード ファイルに対して何らかの処理を行うプログラムです。たとえば、プリプロセッサ ディレクティブを使用して記号定数を定義できます。
#define PI 3.14159
次に、この値をコード全体で意味のある名前で使用できます。
area = r * r * PI;
...
circumference = 2 * r * PI;
ここでプリプロセッサが行うことは、すべての PI を指定した数値に置き換えることです。
area = r * r * 3.14159;
...
circumference = 2 * r * 3.14159;
定数がコード内の別の場所で既に定義されているかどうかに応じて、コードを含めることもできます (これは通常、複数のファイルを含むプロジェクトで使用されます)。
#define WINDOWS
...
#ifdef WINDOWS
/* do Windows-specific stuff here */
#endif
#ifdef
との間の行は、定数が前に定義さ#endif
れている場合にのみ含まれます。WINDOWS
ここまでで、プログラムが何をすべきかについてある程度理解できたと思います。
「最低限の機能」を実装するためのヒント
ここでは、教授が必要とする最小限の機能を作成する方法について、いくつかのアイデアを紹介します。これらは私の頭のてっぺんから外れているので、最初にそれらについて考えてください。
コメントの削除
入力を読みながら、" " を探します/*
。これに遭遇したら、出力への書き込みを停止し、「*/
」が見つかったら、再び書き込みを開始できます。boolean フラグを使用して、コメント内にいるかどうかを示します (私の知る限り、C には bool 型がないため、0 または 1 の int を使用するか、より理想的にはINSIDE_COMMENT
とのような 2 つの記号定数を使用しOUTSIDE_COMMENT
ます)。
定数の #define (マクロではない)
# で始まる行に遭遇した場合、明らかにそれを書き出すべきではありません。ディレクティブが見つかった場合は#define
、シンボリック名と値をどこかに保存し (両方とも文字列)、それ以降は入力で名前を探し、見つかるたびに代わりに値を書き出します。定数名の最大長を設定できます。これは C では 6 文字だと思います。常に入力から 6 文字をチェックします。6 文字が既知の定数名で始まる場合は、代わりに値を書き出します。
#ifdef と #endif
#ifdef
コメントと同じように、の中にいるかどうかを示すブール値フラグを作成します。を見つけるとき#ifdef
は、定数名を既に保存しているかどうかを確認し、それに応じて出力に書き込みます。
これが役立つことを願っています。
編集: gsのコメントも読んでください!