2

G++ (GCC) バージョン 4.3.3 を使用して警告を発生させるインライン コードを次に示します。この問題は、ARM マシン上のこの (4.3.3) 古い GCC バージョンでのみ発生します。GCC 4.5.2 を実行している x86 マシンでは、この問題は存在しません。残念ながら、現在 ARM マシンを更新することはできませんが、次のエラーを気にする必要があるかどうか疑問に思っています...

// myclass.h
class MyClass {
 public:
  MyClass();
  ~MyClass() { Cleanup(); }
  void Cleanup();
};
inline void MyClass::Cleanup() {
  // do some minor cleanup here, GCC DOES inline this function
  // with -Winline, I see that no non-inline warnings are thrown
}

問題は、「インラインで宣言される前に void MyClass::Cleanup() が使用されました」という警告が表示されることです。

これは私が気にするべき警告ですか?私は常に関数定義でのみインライン展開してきましたが、基本的にこれ ( http://www.parashift.com/c++-faq/where-to-put-inline-keyword.html ) の「ベスト プラクティス」に従います。

助けてくれてありがとう。

4

1 に答える 1

4

コードは有効であるため、古い G++ からの警告は偽物です。

あなたが心配する必要があるかどうかはわかりません。コードに問題があるという偽の信念に基づいて、G++ が奇妙なことを行う可能性がありますが、私はそれを疑っています-おそらく期待どおりに機能し、偽の警告を発するだけです。デストラクタへのインライン化に失敗する可能性がありますが、それはおそらく大したことでは-Winlineなく、とにかくそうではないことを示しているようです。

于 2013-11-01T00:56:25.723 に答える