[解決済み] インライン関数とプリプロセッサマクロの比較
2022-07-18 11:37:25
質問
インライン関数とプリプロセッサマクロはどのように違うのですか?
どのように解決するのですか?
プリプロセッサ マクロは、コードに適用される置換パターンにすぎません。これらは、コンパイルが開始される前にその展開に置き換えられるため、コード内のほぼすべての場所で使用することができます。
インライン関数は、その本体が呼び出し場所に直接注入される実際の関数です。関数呼び出しが適切な場合にのみ使用することができます。
さて、関数のようなコンテキストでマクロとインライン関数を使うことに関しては、次のことをご承知おきください。
- マクロは型安全ではなく、構文的に正しいかどうかに関係なく展開することができます - コンパイル段階では、マクロ展開の問題から生じるエラーが報告されます。
- マクロは予期しない文脈で使用されることがあり、その結果、問題が発生します。
- マクロは、他のマクロを展開できるという点で、より柔軟である - 一方、インライン関数は必ずしもそうではない。
- マクロは、入力式がパターン内のどこに現れてもコピーされるため、その展開により副作用が発生する可能性があります。
- インライン関数は常にインライン化されるとは限りません。コンパイラによっては、リリースビルド時のみ、あるいはそうするように特別に設定されている場合のみインライン化するものもあります。また、場合によってはインライン化が不可能なこともあります。
- インライン関数は変数 (特に静的変数) のスコープを提供できますが、プリプロセッサ マクロはコード ブロック {...} 内でのみこれを行うことができ、静的変数はまったく同じように動作しません。
関連
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] HTMLでBase64画像を表示する方法
-
[解決済み] 関数/メソッドのキーワード 'inline' はいつ書けばよいのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】「std::operator」で「operator<<」にマッチするものがない。
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件