- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我用 C 语言编写了一组数据结构和函数,其中一些使用 _Bool 数据类型。当我开始时,项目将是纯 C。现在我正在研究使用基于 C++ 的 GUI 工具包,并将后端代码制作成库。
但是,在编译 C++ GUI 时,编译器会发出以下错误:
ISO C++ 禁止声明没有类型的“_Bool”
我最初认为我可以搜索并将 _Bool
替换为 bool
并创建:
/* mybool.h */
#ifndef MYBOOL_H
#define MYBOOL_H
typedef _Bool bool;
#endif /* MYBOOL_H */
然后在任何使用 _Bool 的 header 中
#ifdef __cplusplus
extern "C" {
#else
#include "mybool.h"
#endif
/* rest of header... */
直到我意识到这将使用一种 boolean (C _Bool) 数据类型编译库,并使用另一种 (C++ bool) 链接到库。实际上,这可能无关紧要,但从理论上讲,它可能确实如此(某处可能有一些模糊的系统,这样做会导致宇宙由内而外)。
我想我可以只使用一个 int 并使用 0 表示 false 和 1 表示 true,然后用 typedef int mybool
之类的东西对其进行 typedef,但这似乎没有吸引力。
有没有更好/惯用/标准的方法来做到这一点?
最佳答案
如果您使用的 C 和 C++ 编译器来自同一供应商,那么我希望 C _Bool
与 C++ bool
的类型相同, 包括 <stdbool.h>
将使一切都很好地互操作。如果它们来自不同的供应商,那么您需要检查兼容性。
注意,您可以随时测试 __cplusplus
头中的宏来确定代码是否被编译为 C++,并适本地设置类型。
关于c++ - _Bool 和 bool : How do I solve the problem of a C library that uses _Bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3529831/
我用 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
我是一名优秀的程序员,十分优秀!