5

Cortex 組み込みプロセッサの lpcxpresso ide の一部として GCC 4.6 を使用しています。特にデバッグモードでコンパイルするときは、コードサイズが非常に限られています。属性((always_inline))を使用すると、これまでのところ、単純な関数をインライン化するための優れたツールであることが証明されており、これにより、デバッグ モードでのコードの膨大な量を節約しながら、読みやすさを維持できます。http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/CIAJGAIH.htmlで言及されているので、将来的にはある程度主流になり、サポートされると思います

ここで私の質問に: これは、Lambda を常にインラインで宣言するための正しい構文ですか?

#define ALWAYS_INLINE __attribute__((always_inline))
[](volatile int &i)ALWAYS_INLINE{i++;}

それは機能します。私の質問は、それが将来も機能し続けるかどうか、そして将来的に機能することを保証するために何ができるかです. c++11 をサポートする別の主要なコンパイラに切り替えた場合、属性((always_inline)) を置き換えることができる同様のキーワードを見つけることができますか? 妖精のゴッドマザーに会うとしたら、空のコンストラクターを使用して一時的に構築され、参照によってバインドされるすべてのラムダが、デバッグ モードでも自動的にインライン化されるようにするコンパイラ ディレクティブが必要です。何か案は?

4

1 に答える 1

1

今後も活躍してくれるのでしょうか?

おそらくですが、always_inlineコンパイラ固有であり、ラムダでの正確な動作を指定する標準がないため、これが将来も機能し続けるという保証はありません。

確実に機能するようにするにはどうすればよいですか?

これは、あなたではなくコンパイラに依存します。将来のバージョンでalways_inlinewith lambda のサポートが終了した場合は、動作するバージョンに固執するか、-likealways_inlineキーワードを使用してラムダをインライン化する独自のプリプロセッサをコーディングする必要があります。

c++11 をサポートする別の主要なコンパイラに切り替えた場合、同様のキーワードを見つけることができますか?

可能性は高いですが、保証はありません。唯一の実際の標準は C++inlineキーワードであり、ラムダには適用されません。非ラムダの場合、インライン展開のみを提案し、関数が異なるコンパイル単位で定義される可能性があることをコンパイラーに伝えます。

于 2013-06-28T22:55:52.480 に答える