在C

时间:2018-10-15 02:25:33

标签: 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;
} 

Variables window in debug mode

正如您所看到的,Netbeans所说的是某些索引持有看似为int值的索引,而当我声明所有值均为false时,突出显示的索引甚至为true。

1 个答案:

答案 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调试器错误或您使用的是错误的:-)