1. ホーム
  2. c++

[解決済み] インライン関数とプリプロセッサマクロの比較

2022-07-18 11:37:25

質問

インライン関数とプリプロセッサマクロはどのように違うのですか?

どのように解決するのですか?

プリプロセッサ マクロは、コードに適用される置換パターンにすぎません。これらは、コンパイルが開始される前にその展開に置き換えられるため、コード内のほぼすべての場所で使用することができます。

インライン関数は、その本体が呼び出し場所に直接注入される実際の関数です。関数呼び出しが適切な場合にのみ使用することができます。

さて、関数のようなコンテキストでマクロとインライン関数を使うことに関しては、次のことをご承知おきください。

  • マクロは型安全ではなく、構文的に正しいかどうかに関係なく展開することができます - コンパイル段階では、マクロ展開の問題から生じるエラーが報告されます。
  • マクロは予期しない文脈で使用されることがあり、その結果、問題が発生します。
  • マクロは、他のマクロを展開できるという点で、より柔軟である - 一方、インライン関数は必ずしもそうではない。
  • マクロは、入力式がパターン内のどこに現れてもコピーされるため、その展開により副作用が発生する可能性があります。
  • インライン関数は常にインライン化されるとは限りません。コンパイラによっては、リリースビルド時のみ、あるいはそうするように特別に設定されている場合のみインライン化するものもあります。また、場合によってはインライン化が不可能なこともあります。
  • インライン関数は変数 (特に静的変数) のスコープを提供できますが、プリプロセッサ マクロはコード ブロック {...} 内でのみこれを行うことができ、静的変数はまったく同じように動作しません。