理論C言語プリプロセッサ - マクロ2

マクロ定義2
基準及びパラメータ化マクロ機能との間の差1は、
(1)処理中に予め定義されたマクロ、コンパイルプロセス中の機能です。マクロ定義は、最終的には、マクロの呼び出しされます。この区別はある実質的な違いをもたらす
場その場の拡大にマクロ本体、および関数が実行するのは、呼び出す関数へのジャンプの関数であり、その後、戻ってジャンプを実行します。
注:マクロ定義と最大差の関数である:マクロ定義が拡大する場所であるので、何の呼び出しのオーバーヘッドがないと機能が再びジャンプするために実行されるので、関数が比較的大きい有する
コールオーバーヘッド。コスト上の利点と比較のでマクロ定義及び機能は、オーバーヘッド渡すパラメータがない、と呼ばれていないので、関数本体は、(特に一つだけの文章に)非常に短い場合に
マクロ定義、そのような高効率を置き換えるために使用することができます。
(2)パラメトリックマクロ、及び基準関数との有意差である:マクロ定義は、パラメータの種類をチェックしない、戻り値は、タイプに含まれないと明確な関数パラメータ型
と型を返します。私たちは関数を呼び出すときに、コンパイラは、我々は実際に時間パラメータを渡すと、パラメータ宣言が同じではないことがわかります場合、コンパイラは、パラメータの静的型チェックを行うために私たちを助ける
エラーや警告を報告しています。
注:コンパイラと一致しない場合、プログラマは、コンパイラをチェックしているため、使用する関数の種類を心配するより少ない時間と一致しないよう要求します。プログラマがに大きな注意を払わなければならないときにマクロを使用する
実際の質量の参加と所望のタイプと一致したマクロのパラメータそうでない場合、コンパイラはエラーではないかもしれないが、操作が間違っています。
概要:マクロと関数の長所と短所、長所と短所。一般的には、使用するコードは、より適している場合と機能の効率に影響を与えません。しかし、それらの機能のためには、1つまたは2つの文が費用
マクロパラメータで使用するのに適した、大きすぎます。しかし、パラメータ化されたマクロと短所で:パラメータの型をチェックしません。
2、インラインインラインファンクションキー
機能の定義の前にキーワード傾斜を添加することによって達成(1)インライン関数。
(2)インライン関数には、基本的機能であるので、利点は、関数(インライン関数は、コンパイラは、静的型チェックのパラメータを行うために私たちを助けるために、コンパイラを扱うということである)がある。しかし、彼は
また、パラメータ化されたマクロの利点(ではないがありますオーバーヘッドを呼び出しますが、その場の拡張で)。それはほとんど考慮することができる:インライン関数はマクロパラメータに静的型チェックをもたらすことです。
(3)私たちは関数本体内で機能するとき、我々は、トラブルシューティングするためのコンパイラをチェックするパラメータの型を使用したいが、また、何が存在しないことを願っています(例えば、1つまたは2つの文章)非常に短い
オーバーヘッドを呼び出すための時間に、最善中古インラインであります機能。
図3に示すように、条件付きコンパイル(の#ifdefの#defineの#undef)を実装するためのマクロ定義は、
(1)プログラムは、デバッグとリリースバージョンバージョンを有し、違いはマクロDEBUGの定義は時間をコンパイルするかどうかです。

1つの#include <stdio.hの>
 2  
。3  の#define DEBUG
 。4  
。5  // DEBUGの#undef     // マクロがキャンセル、前に定義されている場合、マクロの登録を解除する
。6  DEBUGの#ifdef
 。7  の#defineデバッグ(X)のprintf(X)
 。8  の#else 
9。 の#defineデバッグ(X)
 10  #endifの
11。 
12が INTメイン(ボイド13は 、{
 14      デバッグ(" これはデバッグ情報\ N-である。" );
 15      リターン 0 ;
 16 }

 

おすすめ

転載: www.cnblogs.com/jiangtongxue/p/11736751.html