2016-04-15 7 views
-3

でディレクティブを定義し、特定の理解ヘルプ機能を機能させる。彼は次の#define文を持っているヘッダファイルでは、私はCSの学生と私は私が私たちの講師は私たちの.hとに完了するために私たちを必要とするコードセグメントを持つ2つの.cファイルを与えているの割り当てを持っているC.を勉強C

:最初の定義のための

# ifndef LT 
# define LT(A, B) ((A) < (B)) 
# endif 

# ifndef EQ 
# define EQ(A, B) ((A) == (B)) 
# endif 

は、私はLTは、「名前」であることを知っているが、私は右の構文が何をしているか理解しません。 2番目のものと同じ。

LT 2つの変数AとBの比較であり、それはAが誰かが私はこの

+1

**ヒント**:** L ** ESS **トン**漢と** EQ ** uals。 –

+0

これらはマクロと呼ばれます。だからマニュアルを読むことから始める。 gccを使用している場合は、関連セクションは[here](https://gcc.gnu.org/onlinedocs/cpp/Macros.html)です。 – kaylum

+0

LTは、AがLess Than Bであることを確認します(逆の方法ではありません)。 – pm100

答えて

2

これらはマクロであると理解する助けてくださいだろうB.

その後、大きいことを確認するように私には見えます。あなたのCコードを持っている場合は

その後、

if(LT(xx, yy)) 
{ 
    printf("xx is less than yy\n"); 
} 

は、コンパイル時にコードが

if((xx) < (yy)) 
{ 
    printf("xx is less than yy\n"); 
} 

これは、プリプロセッサによって行われるに変更され、それがその内容を見ているという事を#defineで定義変更

+0

はい、gccを使用している場合は、 'cpp'を使って前処理されたファイルを見ることもできます... – mame98

+0

ありがとう!これは基本的にマクロなのです。自分のコードにLT(54,63)と入力すると、プログラムをコンパイルするときに((54)<(63))に置き換えられます。 –

+0

はい、あなたがそれを知っていなかったら、ひどい先生がいます:-) – pm100

2

は、Cについての本を取得し、プリプロセッサの機能時に読み込むようにしてください。意味的な意味をもたない単なる構文的な置き換えに過ぎない。

LTが定義されていない場合、プリプロセッサ定義LTを導入してください。 プリプロセッサが2つのパラメータを持つLTという文字列をどこに置いても、プリプロセッサがテキストを見つけたら(text1text2と言う)、このテキストLT(text1, text2)((text1) < (text2))に置き換えられます。

秒と同じです。

は、彼らが重要であり、括弧に注意してください。コードLT(x+y, z-1)に次のような外観の例を作成してください。ここでかっこが重要である理由を理解する必要があります。

私はそれは章プリプロセッサに専念し、理解することは難しいことではありませんを持って学習C.のためにK & Rをお勧めすることができます。 私の用語がここでは最高ではないことに気付くでしょうが、その瞬間にその概念を理解しようとします。

+0

Elyasinありがとうございます。したがって、これは、LTまたはEQの後ろにかっこ内に置かれているものをどのように出力するかを定義しています。これは比較をしません、それは "パラメータ"として入力されたものに基づいて出力をフォーマットし、これはどのようにコンパイラはLTを読み取るのですか? –

+0

これは単純にLTとそのパラメータを定義に置き換えるだけです。それは前処理です。前処理が終了すると、置き換えられた定義はCコンパイラにとって意味があります。 – Elyasin

関連する問題