使用#include<;stdbool.h>;在C中
我不知道为什么会这样。有人遇到过这种情况吗?我正在使用Netbeans 8.2,该程序正在调试模式下运行使用#include<;stdbool.h>;在C中,c,arrays,debugging,netbeans,boolean,C,Arrays,Debugging,Netbeans,Boolean,我不知道为什么会这样。有人遇到过这种情况吗?我正在使用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; } #包括 #包括
#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;
}
#包括
#包括
#包括
#定义N 100
int main(){
//所有储物柜都关上了
布尔储物柜[N+1]={false};
返回0;
}
正如您所看到的,Netbeans表示,有些索引包含看起来像int值的内容,而当我将所有值声明为false时,突出显示的那个索引甚至是true 布尔值是一种算术类型,因此,当您在初始化器中没有提供显式值时,应将其初始化为静态值 这在(例如)
C116.7.9初始化中有详细说明(解释):
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;
}
#包括
#包括
#包括
#定义N 100
int main(){
//所有储物柜都关上了
布尔储物柜[N+1]={false};
对于(int i=0;请不要让代码仅在图像中可用。请将其包含在问题中。尽可能避免调试器图像。调试器显示伪值时的当前行是哪一行?可能是在执行初始化之前,因此内容不确定吗?在到达返回0;
之前储物柜中的值不是真正确定的。另外,请向我们展示完整的代码,而不是它的一部分。什么是N
?为什么有numberOfStudents
?啊,这是正确的。程序没有完成将每个元素的值设置为false,因为它没有返回0;也许您只是在行bool lockers[N+1]={false}之前的e调试器
甚至已经被执行…无论如何,没有人能够用给出的信息重现问题。如果是这样,要么是NetBeans调试器错误,要么是您在这里晚了一点才使用它,但第三种可能是初始化被优化了,因为原始代码中的储物柜
数组是never accessed。@Andrew,这是一个很好的观点,至少对原始代码来说是这样,因为很可能是遵循了“好像”规则,而编译器发现它没有被使用。