1

STLヘッダーファイルを見ると、代わりに1行、場合によっては1語を直接書き込むことができる多くのマクロが使用されていることがわかります。なぜこんなにたくさんのマクロを使うのかわかりません。例えば

 _STD_BEGIN

using ::type_info;

 _STD_END


 #if defined(__cplusplus)
  #define _STD_BEGIN    namespace std {
  #define _STD_END      }
  #define _STD  ::std::
4

3 に答える 3

4

ライブラリプロバイダーは、さまざまな実装とユースケースに対処する必要があります。この場合にマクロを使用する理由は2つあります(おそらく、今は考えていない他の理由もあります)。

  • 名前空間をサポートしないコンパイラをサポートする必要性。最近の実装で問題になるかどうかはわかりませんが、名前空間をサポートしていないコンパイラがサポートされなくなったとしても、それらのほとんどは長い歴史があり、そのようなマクロを削除しています(保護されていないusing ::type_info;ことは、それがケース)の優先度は低くなります。

  • コンパイラプロバイダーが提供するものに加えて、標準ライブラリの実装を顧客が置き換えずに使用できるようにしたいという要望。ライブラリを構成すると、の代わりに別の名前を使用できるようになりstdます。

于 2013-01-02T12:57:22.137 に答える
4

それか

#if defined(__cplusplus)

あなたのサンプルでは鍵です。ソースのさらに下に、マクロの代替定義が表示されると思います。コンパイル環境によっては、一部の構成で異なる構文が必要になる場合や、まったくサポートされない場合があります。そのため、このような構成にマクロを使用してコードを1回記述し、サポートされているものに応じてマクロが適切に定義されるように調整します。

于 2013-01-02T12:57:58.827 に答える
1

マクロと変数:この場合、マクロは前処理後に実際に定数になるため、より高速に実行できます(定数の操作は変数の操作よりも高速です)。

マクロと関数:マクロを使用すると、関数を使用してパラメーターをスタックにプッシュし、リターンアドレスをプッシュしてから、スタックからポップする必要がある場合と比較して、オーバーヘッドを回避できます。

マクロ:実行は高速ですが、より多くのメモリスペースが必要です。機能:実行速度は遅くなりますが、メモリスペースは少なくなります。

于 2013-01-03T06:58:18.187 に答える