問題タブ [inline-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - ((always_inline)) 関数が別のファイルに実装されている場合は機能しません
funcs.h
関数の宣言があるファイルがあります:
funcs.c
次に、関数の実装があるファイルがあります。
次に、メイン ファイルmain.c
で#include
、コードのどこかでfuncs.h
使用しようとします。some_func()
しかし、プログラムをコンパイルしてバイナリ ファイルを見ると、関数はインラインとして埋め込まれているのではなく、通常の個別の関数としてコンパイルされ、他の通常の関数と同じように呼び出されているように見えます。
なぜそれが起こっているのですか?実際のインライン化をこれに強制する方法はありますか? #define
(もちろん、関数の代わりにマクロを使用するというオプションは除きます。)
c++ - クラスで定義された C++ メンバー関数は、C では重複シンボルを生成するのに、なぜ重複シンボルを生成しないのですか?
C 例
bb.c:
main.c:
ああ:
bb.h:
C 結果
clang main.c bb.c でコンパイル:
C++ の例
b.cpp:
main.cpp:
a.hpp:
b.hpp:
C++ の結果
上記は問題なくコンパイルclang++ main.cpp b.cpp
され、プログラムへの出力は次のとおりです。
質問
C++版で重複エラーが発生しないのはなぜですか?
関数
void a::doit()
がソース ファイルではなくヘッダー ファイルで定義されているということは、コンパイラが関数を自動的にインライン化するということですか?
c++ - C++ インライン関数とコンテキスト固有の最適化
Scott Meyers の効果的な C++ の本を読んだことがあります。
関数をインライン化すると、コンパイラが関数の本体に対してコンテキスト固有の最適化を実行できるようになります。このような最適化は、通常の関数呼び出しでは不可能です。
問題は、コンテキスト固有の最適化とは何か、なぜそれが必要なのかということです。
c - インライン関数をマクロに変換する
コード内のホットスポットの一部である 1 行のinline
関数があります。これをマクロに変更すると有益かどうかを確認したいと思います。関数として書くことで、副作用を心配する必要はありませんでした。しかし、副作用のないマクロを作成するにはどうすればよいでしょうか?
c - 静的インライン、extern インライン、通常のインライン関数の違いは何ですか?
と通常のstatic inline
関数の違いは何ですか?extern inline
inline
私はこれについていくつかのあいまいな説明を見てきました。私が理解している限り、キーワードが通常意味するように、特定のファイル内でのみ参照されることを意図した単なる関数でstatic inline
はありません。変数と同じ説明ではないと思います。どんな答えでも大歓迎です!inline
static
extern inline
extern