G ++内联警告

时间:2013-11-01 00:49:10

标签: c++ gcc g++ inline compiler-warnings

这是一些使用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
}

问题是我收到警告:“在内联声明之前使用了无效的MyClass :: Cleanup()”

这是一个我应该关注的警告吗?我总是只在函数定义中内联,基本上遵循这个(http://www.parashift.com/c++-faq/where-to-put-inline-keyword.html)“最佳实践。”

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

代码有效,因此旧G ++的警告是假的。

我不知道你是否应该担心。 G ++可能会根据其认为代码中存在问题的虚假信念做出奇怪的事情,但我对此表示怀疑 - 它可能会按预期运行并且只是发出虚假警告。它可能无法将其内联到析构函数中,但这可能不是什么大问题,-Winline似乎表明情况并非如此。