2016-06-15 4 views
-1

C++のインライン拡張されていませんが、私は機能は、私はswitch文を使ってC++でプログラムをコンパイルしようとした

「スイッチを含む関数がインラインを拡張されていません」という警告メッセージが表示されました

私のプログラムは正しい出力を出しましたが、私はこの警告メッセージの意味を知りたいと思います。

+1

[最小、完全で、かつ検証可能な例]を投稿してください。http://stackoverflow.com/help/mcve)。 –

+1

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/wrnnoinlexp_xml.htmlをご覧ください。 – Jarod42

答えて

1

あなたの質問に答えるための入力がさらに必要になります。

コードのスイッチケースを含む関数に対して、インラインキーワードを明示的に使用していますか? もしあなたが(私はあなたが持っていると思う)場合は、コンパイラはその関数をインラインとして扱う要求を無視することができます。 コンパイラは、インライン関数を無視して、いくつかの例がありますが、以下のように、彼らは以下のとおりです。ループを含む

  • 機能。 (for、while、do-while)
  • 関数には静的変数が含まれています。 goto文を含むスイッチ
  • 機能を含む
  • 再帰関数
  • 機能。

上記は私が当面思い出すことのできるいくつかの条件です。

0

標準では必須ではありませんが、スイッチは通常、スイッチポインタがキーとなる関数ポインタの配列に変換されます。関数がインライン化されていれば、関数ポインタが異なる可能性があるため、この配列の別々のコピーが各場所に必要でした。これは非常に効率的ではありません(キャッシュの仕組みのおかげで、メモリとスピードの両方に関して)、これはコンパイラがインライン化しないことを決定するかもしれません。 (巧妙なアーキテクチャの巧妙なコンパイラは、この配列のプログラムカウンタの相対アドレスを使用するかもしれないので、この動作はコンパイラ固有のものです)。

関連する問題