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 回答