【发布时间】:2011-08-25 14:38:23
【问题描述】:
以下代码在 Windows、Mac 和 iOS 上编译时不会发出警告:
class MyClass {
SomeOtherClass * m_object;
void (SomeOtherClass::*m_callback)();
public:
MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)()=NULL) :
m_object(_object),m_callback(_callback) {}
void DoStuff() {
//generates warning: NULL used in arithmetic when compiling with the Android NDK
if (NULL==m_callback) {
m_object->DoNormalCallback();
} else {
(m_object->*m_callback)();
}
}
};
为什么会生成该警告,我该怎么办?
【问题讨论】:
-
将事物与
NULL进行比较是一种很好的风格,而不是将NULL与事物进行比较。切换顺序:if (m_callback == NULL) -
编写
if (0==x)是众所周知的技巧,因此如果您将==与=混淆,您将破坏编译,而不仅仅是收到警告(或什么都没有)。 -
一些指导方针说将常量放在比较的左侧以避免错误分配。我认为它不值得,但还有其他意见。
-
@Seth 将其更改为
if (m_callback==NULL)仍然会产生警告,我只是列出了我通常编写的代码。 -
我发现
if (0==x)的技巧非常丑陋,但它是完全有效的代码,我不知道有任何编译器会警告它。
标签: c++ android-ndk