2016-07-28 7 views
-4

私はGreg PerryのC by example本を読んでC言語を教えていますが、私はちょうど第6章「プリプロセッサ指令」を終えました。 各章の最後には、レビューの練習があります(トピックの内容とその適用方法を理解するために)。これは#defineを使用する最も良い方法ですか?

私は第6章の第4回レビュー練習をしており、これが正しい方法であるかどうか疑問に思っていましたか? (運動は、画像の上部に書かれている。)

The code I wrote for the exercise

私の質問:これは演習を完了するための最良の方法です、または多くの方が効率的である簡単な方法はありますか?

+8

あなたのコードの画像ではなく、郵便番号です。 – melpomene

+2

短い答え:いいえ。 –

+2

http://codereview.stackexchange.com/をご覧ください。 – melpomene

答えて

1

#defineを使用するための最良の方法は、もはや使用する必要があります:)

の機能の一例として、あるしかし、あなたは#defineを使う、という場合は、マクロの展開は、マクロのを尊重していないことを覚えておいてください境界。入力ストリームにトークンを挿入するだけです。したがって、常に式をカッコで囲む必要があります。マクロが引数を取る場合は、それらもカッコで囲む必要があります。あなたのケースでは

#define TOTAL (NO0 + NO1 + NO2 + NO3 + NO4 + NO5 + NO6 + NO7 + NO8 + NO9) 

あなたは、あなたはあなたの定義と36の代わりになると思われる、例えば、TOTAL/10、の結果で驚かれることでしょうことを実行しない場合4.

は同様に予想:あなたのようにそれを呼び出す場合

#define SQUARE(x) x * x 

は、例えば、SQUARE(y + 1)を正しい結果を生成しません。あなたは使用する必要があります。

#define SQUARE(x) ((x) * (x)) 

も、あなたはあなたがSQUARE(y++)としてそれを呼び出す場合には驚き可能見つけることができます。

これらの問題はすべて、マクロの使用を避けることで回避できます。最近では、マクロを使用せずにコードを最適化するために、最新のコンパイラを使用することができます。

関連する問題