我不知道为什么会这样。有人遇到过这个吗?我使用的是Netbeans 8.2,程序正在调试模式下运行。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 100
int main() {
//all lockers are closed
bool lockers[N + 1] = {false};
return 0;
}
正如您所看到的,Netbeans所说的是某些索引持有看似为int值的索引,而当我声明所有值均为false时,突出显示的索引甚至为true。
答案 0 :(得分:2)
布尔是一种算术类型,因此,当您在初始化程序中未提供显式值时,应将它们初始化为静态变量。
(例如)C11 6.7.9 Initialization
中对此有详细说明(解释):
21 /如果用大括号括起来的列表中的初始化程序少于集合的元素或成员,则集合的其余部分应为 隐式初始化的对象与具有静态存储持续时间的对象相同。
10 /如果未明确初始化具有静态或线程存储持续时间的对象,并且具有算术类型,则将其初始化为(正数或无符号)零。
根据正确检查,对您的代码进行如下临时更改:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define N 100
int main() {
//all lockers are closed
bool lockers[N + 1]= {false};
for (int i = 0; i <= N; ++i)
if (lockers[i])
printf("%d is the wrong value\n", i);
return 0;
}
您根本不会获得任何输出,如果是这种情况,则说明NetBeans调试器错误或您使用的是错误的:-)