【发布时间】:2021-09-07 11:15:46
【问题描述】:
这是合法的还是推荐的?我读到你应该只使用整数类型作为位域,但这适用于布尔类型吗?这可以吗,或者这是不好的做法或未定义的行为?
struct MyStruct {
// ...
bool SomeBooleanProperty:1;
// ...
};
【问题讨论】:
-
没关系,因为 bool 可以有两个完全适合 1 位位域的整数值
-
bool是整数类型。 -
拥有
bool类型的位域是完全可以的,这在C17 标准6.7.2.1 (5) 中有明确规定(注意_Bool与bool相同)。 -
虽然听说
bool和unsigned char有细微的差别 -
就可取性而言,它受制于一般使用位域的所有相同优点和缺点,这在其他地方进行了令人作呕的讨论,例如stackoverflow.com/questions/24933242/…
标签: c struct boolean bit-fields