Các bit mã sau biên dịch mà không cần cảnh báo cho Windows, Mac và iOS:Tại sao so sánh một con trỏ hàm thành viên với NULL tạo ra một cảnh báo?
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)();
}
}
};
Tại sao cảnh báo rằng tạo ra và những gì tôi có thể làm gì về nó?
Đó là phong cách tốt để so sánh mọi thứ với 'NULL', không so sánh 'NULL' với mọi thứ. Chuyển đổi thứ tự: 'if (m_callback == NULL)' –
Bí quyết để viết 'if (0 == x)' để nếu bạn nhầm lẫn '==' với '=', bạn sẽ phá vỡ sự biên dịch, chứ không phải chỉ nhận được cảnh báo (hoặc không có gì). – hamstergene
Một số nguyên tắc đang nói để đặt hằng số vào bên trái của phép so sánh để tránh việc gán sai. Tôi nghĩ nó không đáng giá nhưng có những ý kiến khác. – Simon