問題タブ [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.

0 投票する
1 に答える
1347 参照

c - ((always_inline)) 関数が別のファイルに実装されている場合は機能しません

funcs.h関数の宣言があるファイルがあります:

funcs.c次に、関数の実装があるファイルがあります。

次に、メイン ファイルmain.c#include、コードのどこかでfuncs.h使用しようとします。some_func()しかし、プログラムをコンパイルしてバイナリ ファイルを見ると、関数はインラインとして埋め込まれているのではなく、通常の個別の関数としてコンパイルされ、他の通常の関数と同じように呼び出されているように見えます。

なぜそれが起こっているのですか?実際のインライン化をこれに強制する方法はありますか? #define(もちろん、関数の代わりにマクロを使用するというオプションは除きます。)

0 投票する
3 に答える
1132 参照

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され、プログラムへの出力は次のとおりです。

質問

  1. C++版で重複エラーが発生しないのはなぜですか?

  2. 関数void a::doit()がソース ファイルではなくヘッダー ファイルで定義されているということは、コンパイラが関数を自動的にインライン化するということですか?

0 投票する
4 に答える
566 参照

c++ - C++ インライン関数とコンテキスト固有の最適化

Scott Meyers の効果的な C++ の本を読んだことがあります。

関数をインライン化すると、コンパイラが関数の本体に対してコンテキスト固有の最適化を実行できるようになります。このような最適化は、通常の関数呼び出しでは不可能です。

問題は、コンテキスト固有の最適化とは何か、なぜそれが必要なのかということです。

0 投票する
2 に答える
862 参照

c - インライン関数をマクロに変換する

コード内のホットスポットの一部である 1 行のinline関数があります。これをマクロに変更すると有益かどうかを確認したいと思います。関数として書くことで、副作用を心配する必要はありませんでした。しかし、副作用のないマクロを作成するにはどうすればよいでしょうか?

0 投票する
1 に答える
11986 参照

c - 静的インライン、extern インライン、通常のインライン関数の違いは何ですか?

と通常のstatic inline関数の違いは何ですか?extern inlineinline

私はこれについていくつかのあいまいな説明を見てきました。私が理解している限り、キーワードが通常意味するように、特定のファイル内でのみ参照されることを意図した単なる関数でstatic inlineはありません。変数と同じ説明ではないと思います。どんな答えでも大歓迎です!inlinestaticextern inlineextern