首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用#include <stdbool.h>

在C中使用#include <stdbool.h>
EN

Stack Overflow用户
提问于 2018-10-15 02:25:33
回答 1查看 4K关注 0票数 3

我不知道为什么会发生这种事。有人遇到过这种情况吗?我正在使用Netbeans 8.2,程序在调试模式下运行。

代码语言:javascript
复制
#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时,突出显示的值甚至是正确的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 02:45:35

布尔值是一种算术类型,因此,当您没有在初始值中提供明确的值时,应该将其初始化为静态值。

这在(例如) C11 6.7.9 Initialization中有详细的(解释)。

21如果大括号括起来的列表中的初始化器少于聚合的元素或成员,则聚合的其余部分应隐式初始化,与具有静态存储持续时间的对象相同。 10如果具有静态或线程存储持续时间的对象没有显式初始化,如果它具有算术类型,则初始化为(正或无符号)零。

在正确检查方面,对代码进行以下临时更改:

代码语言:javascript
复制
#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调试器是错误的,要么是您使用错了:-)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52808967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档