Khác

Cảnh báo Mac: đề xuất dấu ngoặc đơn xung quanh phép gán được sử dụng làm giá trị sự thật

NS

rublesaha

Áp phích gốc
Ngày 22 tháng 12 năm 2008
  • Ngày 8 tháng 1 năm 2009
Chào
Tôi đang sử dụng đoạn mã này

void * xử lý_;

if (handle_ = dlopen ('/ System / Library / Frameworks / DiskArbitration.Framework / Versions / A / DiskArbitration', RTLD_NOW))
{
printf ('............');

}
else if (handle_ = dlopen ('/ System / Library / PrivateFrameworks / DiskArbitration.Framework / Versions / A / DiskArbitration', RTLD_NOW))
{
printf ('.................');
}

Nhưng tôi nhận được cảnh báo:
'gợi ý dấu ngoặc quanh phép gán được sử dụng làm giá trị chân lý' cho dòng đầu tiên i, e cho vòng lặp 'for' .... ai đó có thể giúp tôi loại bỏ cảnh báo này .. ĐẾN

kpua

Ngày 25 tháng 7 năm 2006


  • Ngày 8 tháng 1 năm 2009
Trước hết, hình thức thường không tốt khi có các tác dụng phụ trong câu lệnh if ().

Tuy nhiên, đôi khi đó là cách đơn giản nhất để viết mã ý bạn (mặc dù tôi không nghĩ nó nhất thiết phải có trong ví dụ của bạn). Khi bạn có một nhiệm vụ trong câu lệnh if, GCC thường mong đợi điều gì đó như sau:

Mã: if ( (foo = bar()) != NULL )
Chú ý các dấu ngoặc đơn xung quanh bài tập. GCC đề nghị bạn sử dụng dấu ngoặc đơn để tránh lỗi sau:

Mã: if ( foo = bar() != NULL )
điều này sẽ không kiểm tra giá trị được gán cho foo bằng NULL, mà là gán boolean (bar ()! = NULL) cho foo.

Việc kiểm tra boolean rõ ràng cũng theo thông lệ và thường rõ ràng hơn ở đó, vì vậy đó là lý do tại sao GCC mong đợi điều này. NS

Sander

đến
Ngày 24 tháng 4 năm 2008
  • Ngày 9 tháng 1 năm 2009
Đó cũng là vì câu nói

Mã: if (a = b) {...}
C là đúng (gán b cho a và kiểm tra khác 0), nhưng thông thường mọi người thực sự có ý

Mã: if (a == b) {...}
Vì phép gán bên trong if () là ngoại lệ, GCC đưa ra cảnh báo về nó. Ngoài ra, đối với những người đọc mã của bạn trong tương lai, dấu ngoặc đơn bổ sung cho biết 'có, ý tôi thực sự là nhiệm vụ ở đây'.