使用#include 在C.

问题描述 投票:1回答:1

我不知道为什么会这样。有没有遇到过这个?我正在使用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时,突出显示的那个索引甚至是真的。

c arrays debugging netbeans boolean
1个回答
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调试器错误或您使用错误:-)

© www.soinside.com 2019 - 2024. All rights reserved.