web-dev-qa-db-ja.com

インラインvs __inline vs __inline__ vs __forceinline?

これらの4つのインライン(キーワード)ワードの違いは何ですか?

inline__inline__inline____forceinline

66
Xavier Ho

inlineは、C++およびC99のtheキーワードです。

___inline_はベンダー固有のキーワードです(例: [〜#〜] msvc [〜#〜] )。これは、C89にはないため、Cのインライン関数です。

___inline___は___inline_に似ていますが、別のコンパイラーセットからのものです。

___forceinline_は別のベンダー固有の(主にMSVC)キーワードであり、___inline_ヒ​​ント(たとえば、コードが悪化した場合でもインライン)よりも関数をインラインに強制します。

GCCとclangには__attribute__((always_inline))もあります。

83
kennytm

__inline__inline__および__forceinlineはすべて実装固有です。アンダースコアが2つあるため、これらはすべて実装用に予約されている識別子であるため、アプリケーションで使用される識別子と競合することはありません。

inlineが唯一のC++キーワードです。

20
CB Bailey

Visual Studioコンパイラの場合:

  • inline-コードをインライン化するためのコンパイラへの提案

  • __ forceinline-組み込みコンパイラの最適化をオーバーライドし、インラインコードを生成します

詳細については、以下を参照してください: http://msdn.Microsoft.com/en-us/library/z8y1yy88%28VS.71%29.aspx

8