問題タブ [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++ - 以前はC++関数が機能していましたが、現在は0xfdfdfdfdを返します。
数年前に書いたコードがあります。正常に動作していますが、他の場所にある新しい無関係のコードを使用して最近再構築した後、動作しなくなりました。これはコードです:
上記は次のようにメインアプリからアクセスされます:
私が言ったように、これは長い間機能していましたが、最新のビルドの時点で失敗し始めることが決定されました。これをデバッグしましたが、ポインタが設定されているコードで、メモリアドレスが実際の値に正しく設定されていることがわかります。set関数にステップインし、メモリアドレスを書き留めてから、この関数に移動し、0xfdfdfdfdを取得してから、デバッガーで手動でメモリアドレスを取得することもできました。これにより、コードが機能します。さて、私が読んだことから、0xfdfdfdfdはバイトを保護すること、または「人の土地がない」ことを意味しますが、それが何を意味するのかはよくわかりません。おそらく、それは1つのエラーによるオフも意味しますが、コードが以前に機能していた場合、それがどのように発生する可能性があるのかわかりません。
c - Cインライン関数と「未定義の外部」エラー
一部のマクロサブルーチンをインライン関数に置き換えようとしているので、コンパイラーはそれらを最適化できるので、デバッガーはそれらにステップインできます。通常の関数として定義すると、次のように機能します。
しかし、それらをインラインとして定義すると、次のようになります。
「エラー:未定義の外部」と表示されます。どういう意味ですか?暗闇の中で刺してみました
これ以上のエラーはありません。関数の定義と関数の呼び出しは、同じ.cファイルにあります。
誰かがなぜ一方が機能し、もう一方が機能しないのか説明できますか?
(2番目の関連する質問:複数の.cファイルでインライン関数を使用する場合、どこにインライン関数を配置しますか?)
c - 静的インライン関数の正体?
Cの静的インライン関数は実行時にIDを持っていますか?
その構成の名前の競合を気にする必要がありますか?
関数が.c
ファイルで定義されている場合は? 同じですか?
c++ - インライン関数/メソッド
ステートメント: "インライン関数は、呼び出される前に定義する必要があります。"
この記述は正しいですか?
[編集]
質問はもともとドイツ語です:
Inline-Funktionen mussen vor ihrem Aufruf definiert sein.
多分それは誰かを助ける...
c - API構造体ユーティリティ-関数またはマクロ?
ライブラリAPIで定義されたユーティリティ構造体があり、4つのフィールド、すべて数値カウンターがあります。
これらの構造を簡単に操作できるユーティリティをいくつか提供したいと思います。これらを(静的インライン)関数として実装できます。
または、これらをマクロとして実装することもできます。
これら2つのアプローチを比較検討するために何を検討する必要がありますか?それぞれが同じように強力で柔軟性がある可能性がありますが、何らかの理由で1つのアプローチが特に望ましいのでしょうか。
c++ - GCCコンパイラでのインライン化の深さ
私はそれを研究しました
インライン指定子は、関数のコードを一度配置してから通常の関数呼び出しメカニズムを介して呼び出すのではなく、コード[...]をインラインで生成しようとする必要があるというコンパイラーへのヒントです。
質問:
- GCCコンパイラの最適化がオフになっている場合、インライン指定子は無視されますか?
- インライン関数が再帰的に呼び出される場合、通常の関数呼び出しメカニズムに従うまで、どのコンパイラオプションが「インライン化の深さ」を決定しますか?
- インライン関数がforループ内で呼び出された場合、同じ「インライン化の深さ」が画像に現れますか?
c++ - 関数が C++ でインライン化されていることを保証する方法
inline
C++ では、キーワードを使用して関数をインラインとして定義できます。関数が呼び出されるすべての場所に関数の完全な本体を挿入するようにプログラマーがコンパイラーに要求したようなものです。
しかし、私が知っているように、コンパイラはこの要求を尊重する義務はありません。関数がインライン化されていることを保証する方法はありますか?
c++ - C++ - CPP と H で定義されたインラインの違いは何ですか?
これは「私はこの問題を抱えています」という質問ではなく、「言語がどのようにうまく機能するかを本当に理解したい」という質問です。
最近、特定のクラスの .cpp ファイルでインライン機能の定義に遭遇し始めました。インライン機能の定義ポイントの実際の違いを理解したいと思います。CPP で定義されたインラインのオブジェクト レベルの分析を行うと、(.h で定義されているのではなく) C++ で宣言されているインラインの割合が、正当にインライン化されるのではなく、マップされた関数に最適化されているようです。これが大きな違いですか、それとも私が見ていないこの完全な背後にある他の目的があります。
c++ - ループとインライン関数
ループを含む関数をインライン化できないのはなぜですか? パフォーマンスの問題によるものですか、それとも他の理由がありますか?
c++ - C++入門編 3rdの文章の読み方
<C++ primer (3rd)>
以下は、 Stanley B. Lippman Josée Lajoie によるの第 7.6 章からの抜粋です。
inline として指定された関数は、関数が呼び出されたプログラム内の各ポイントで「インライン」に展開されます。例えば、
int minVal2 = min( i, j );
コンパイル中に展開されます
int minVal2 = i < j ? 私:j;
したがって、min() を関数にする実行時のオーバーヘッドは取り除かれます。min() は、関数の宣言または定義で関数の戻り値の型の前に inline キーワードを指定することにより、インラインで宣言されます。
inline int min( int v1, int v2 ) { /* ... */ }
ただし、インライン指定はコンパイラへの推奨事項にすぎないことに注意してください。インラインで宣言された関数は呼び出し時点での展開に適していないため、コンパイラはこの推奨事項を無視することを選択する場合があります。たとえば、rgcd() などの再帰関数は、呼び出しの時点で完全に展開することはできません (最初の呼び出しは可能ですが)。1,200 行の関数も、呼び出し時に展開されない可能性があります。一般に、インライン メカニズムは、頻繁に呼び出される小さく直線的な関数を最適化することを目的としています。 これは、セクション 2.3 で導入された IntArray クラスの size() インライン メンバー関数など、抽象データ型の設計に隠されている情報をサポートする上で最も重要です。
誰かが太字でマークされた文を説明できますか?