当设计数据结构以通过连接C和C++代码的C API传递时,是否可以安全地使用bool
?也就是说,如果我有一个像这样的struct
:
struct foo {
int bar;
bool baz;
};
在C(其中它是一个_Bool
)和C++中,baz
的大小、含义以及在foo
内的位置是否以相同的方式解释是有保证的吗?
我们正在考虑在单个平台上(在Beaglebone上的Debian 8上使用GCC),通过相同的GCC版本编译C99和C++11代码。欢迎提出一般性意见。
sizeof(bool)
和sizeof(_Bool)
(C99布尔类型)的大小取决于实现。如果在您的平台上使用一组编译器时它们具有相同的大小,只要您坚持使用这些编译器,就可以认为它是安全的。但是,关于结构布局的填充方式,即使布尔类型的大小相同,可能也会存在其他问题。 - Jabberwockybool
的大小从32位改为8位。因此理论上应确保不要混合使用来自不同编译器版本的目标代码。但另一方面,现代编译器几乎不会使用大于8位的bool
类型。 - nwellnhofint32_t
和uint8_t
。 - chux - Reinstate Monica