考虑以下短程序:
int main() {
int a = 5, b = 1, c;
c = !a & b;
c = !a & 1;
return c;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么 gcc 给出警告 b = 1; c = !a & b;但不是 for c = !a & 1;?
int main() {
int a = 5, b = 1, c;
c = !a & b;
c = !a & 1;
return c;
}
Run Code Online (Sandbox Code Playgroud)
我的 gcc 版本是 8.3.1(我尝试了另一个版本,但发生了同样的事情)。
我经常对 gcc 的“智能”程度感到惊讶。这个问题看起来很容易解决。那么为什么仍然对第一个发出警告?
当您在同一表达式中使用逻辑运算符和按位运算符时,此警告就会起作用,因为您通常需要一个或另一个,但不是两者都需要。
在这种情况下您看不到警告的原因:
c = !a & 1;
Run Code Online (Sandbox Code Playgroud)
是因为1是一个布尔值等等都&和&&将在此表达了同样的效果。
如果常量是 1 或 0 以外的任何值,则会触发警告。
| 归档时间: |
|
| 查看次数: |
139 次 |
| 最近记录: |