- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面的代码:
_Bool field0;
char field1;
printf("fieldX: [%d]\t[%d]\n", field0, field1);
printf("fieldX ? 1 : 0: [%d]\t[%d]\n", field0 ? 1 : 0, field1 ? 1 : 0);
printf("!fieldX: [%d]\t[%d]\n", !field0, !field1);
printf("!!fieldX: [%d]\t[%d]\n", !!field0, !!field1);
给出以下输出:
fieldX: [165] [165]
fieldX ? 1 : 0: [165] [1]
!fieldX: [164] [0]
!!fieldX: [165] [1]
看起来很令人惊讶,尤其是三元运算符的结果。
用 gcc 4.9.3 和 4.8.3 检查,-O0,没有 -flto。
备注:堆栈先前已使用 0xa5 模式(嵌入式 C 环境)初始化。
最佳答案
使用自动存储访问未初始化的对象会调用未定义的行为。所以这里没有什么奇怪的。
此外,_Bool
对象只能包含两个值:0
或 1
。允许实现替换 !!boolean_object
或 boolean_object ? 1 : 0
通过 boolean_object
。
(另请注意,即使使用 -O0
,gcc
仍在执行一些优化:例如,它内联调用一次的静态函数。)
关于c - 未初始化的 _Bool 变量或结构字段行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852387/
我用 C 语言编写了一组数据结构和函数,其中一些使用 _Bool 数据类型。当我开始时,项目将是纯 C。现在我正在研究使用基于 C++ 的 GUI 工具包,并将后端代码制作成库。 但是,在编译 C++
传统上,C 中的 boolean 值用 int 表示。或 char .新款_Bool type 使意图更清晰,但还有另一个有趣的功能:它似乎将浮点数转换为它,不会向零截断,而是与精确的零进行比较: #
如果 _Bool 类型的行为类似于整数并且不强制值是真/假或 1/0,例如: _Bool bools[] = {0,3,'c',0x17}; printf("%d", bools[2]); > 1 在
我试图编写一些宏以确保 _Bool 的类型安全使用,然后对我的代码进行压力测试。为了邪恶的测试目的,我想出了这个肮脏的黑客: _Bool b=0; *(unsigned char*)&b = 42;
C 标准将 _Bool 定义为包含 0 或 1 的无符号类型。如果 _Bool 类型的值 1 递增,据我所知,有两个选项: 该值在 1 到 0 之间环绕 该值增加到 2,它是非零值,因此在转换回 _B
下面的代码: _Bool field0; char field1; printf("fieldX: [%d]\t[%d]\n", field0, fiel
这个问题已经有答案了: Need for _Bool in C99? (4 个回答) 已关闭 9 年前。 至于stdbool.h ,我可以看到有些人想要 true 的常量和false和一个名为 boo
this 的答案关于 SO 的问题指定 _Bool 是在 C99 中引入的(特别是BobbyShaftoe 的回答)。 但是下面的代码可以与 gcc -std=c90 -pedantic test.c
我正在学习 C _Generic。这是问题:为什么我无法成功编译下面的代码?它只会将错误作为标题发出。 #include #define EVALUATE(X) _Generic((X), _Boo
使用 printf(),我可以将 %hhu 用于 unsigned char,将 %hi 用于 short int,%zu 用于 size_t,%tx 用于 ptrdiff_t 等. 我为 _Bool
我正在VS2013中编译以下代码, #if (__STDC_VERSION__ >= 199901L) /* Inactive pre-processor block */ #else /* Acti
#include #include #include int main(void) { _Bool = b1; printf("1 = Wahr, 0 = Unwahr\n"); b1 = ge
我正在读一本关于 C 的书。它说C99增加了一个数据类型_Bool。它基本上是一个 int 但只存储 0 或 1。现在我不明白为什么需要这样的数据类型。我们已经有了 bool,它隐含地转换为 int,
每当我需要 boolean 类型时,我都会被告知要么创建一个,要么使用 stdbool.h 更好。 由于 stdbool.h 使用 typedef bool _Bool,是否有理由使用 header
假设我们有一个 int 并希望以 boolean 方式在 0 和 1 之间切换它。我想到了以下几种可能: int value = 0; // May as well be 1 value = valu
为什么 C 使用单词 _Bool 来定义 bool 值?而他们使用单词 float 而不是 _Float? 此外,为什么必须包含 bool,为什么不是基本功能的一部分,例如 float? 最佳答案 _
这个问题在这里已经有了答案: Why does sscanf not work properly with a bool type (6 个答案) 关闭 9 年前。 我对我用 C 编写的这段代码有疑
错误 方法 -[EAzureBlobStorageFile configure:key:container:token:] 中存在未知参数类型“_Bool”。扩展 RCTConvert 以支持此类型。
从 C99 开始,C 现在有了一个合适的 boolean 类型,_Bool。 Objective-C 作为 C 的严格超集,继承了这一点,但是在 1980 年代创建时,没有 C boolean 类型,
我想到了 C 和 bool 我们使用 boolean 类型来声明对象,该对象只能保存 0 或 1 的值。例如: _Bool bin = 1; 或 bool bin = 1; (注:bool是stdbo
我是一名优秀的程序员,十分优秀!