デバッグ リリースバージョンによりアクセス違反の発生が変わるので、いろいろソースコードとコンパイラオプションを変えて調べてみた。
まずC++のインライン関数だが、こちらはキーワードを関数に追加してもコンパイラ次第で展開されたり、されなかったりする。つまり「展開してほしい!」とコンパイラに教えるだけ。
ちなみに 「inline」「__inline」の違いは標準C++かコンパイラ依存かである。
又小さな関数ほどinlineをヒントにしてコンパイラが展開してくれる可能性が高いです。
inline関数のセマンティクスのため他のinline関数とはリンクできます。
詳細はARMのFAQを参照してください。http://www.jp.arm.com/tec_support/faqdev/ads043.html
以下がinline出来ない条件です。
- 関数またはその呼び出し元が /Ob0 (デバッグ ビルドのデフォルト オプション) でコンパイルされている。
- 関数とその呼び出し元の例外処理方法が異なる (一方が C++ 例外処理、他方が構造化例外処理)。
- 関数の引数リストが可変長である。
- 関数がインライン アセンブラを使用し、/Og、/Ox、/O1、または /O2 でコンパイルされていない。
- 関数がアンワインド可能オブジェクトを値で返し、/GX、/EHs、または /EHa でコンパイルされていない。
- コピー構築されたオブジェクトを値で受け取る関数を /GX、/EHs、または /EHa でコンパイルした。
詳細はを参照してください。http://www.e-typedesign.co.uk/japan/developer/library/vccore/_langref_inline.2c_.__inline.htm
|