gpt4 book ai didi

c - 如果两个函数都返回 boolean 值,使用按位运算符组合它们是否安全?

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:36 25 4
gpt4 key购买 nike

假设我有两个可能有副作用的函数,并返回 boolean 值。 (使用 bool<stdbool.h> 中定义,因此将 bool 定义为 _Bool 类型)

bool tweedledee(MyState *pmystate);
bool tweedledum(MyState *pmystate);

使用按位运算符组合它们是否安全?

bool both_tweedles = tweedledee(&mystate) & tweedledum(&mystate);

bool either_tweedle = tweedledee(&mystate) | tweedledum(&mystate);

传统上我会使用逻辑运算符 &&|| ;我正在做一个项目,我的团队成员正在使用按位运算符,因为这些函数可能有副作用,我们希望两个函数调用都发生。 (逻辑运算符是 short-circuiting 。)

我唯一的保留是我不确定函数是否返回 bool可以安全地假定返回 1 和 0,而不是作为 true 的替代值的其他值.


举个例子:如果有恶人按照下面的方式实现它们会怎样?

bool tweedledee(MyState *pmystate)
{
return 66;
}

bool tweedledum(MyState *pmystate)
{
return 33;
}

然后 66 & 33是 0,66 | 33是 99。

最佳答案

来自 C99 标准的第 6.3.1.2/1 节:

When any scalar value is converted to _Bool, the result is 0 if the value compares equal to 0; otherwise, the result is 1.

如果您正在使用 stdbool.h , 然后 bool (这是定义为 _Bool 的预处理器宏)因此必须仅为 0 或 1,您的 tweedledeetweedledum函数不能返回超出该范围的值,对它们使用按位运算应该可以达到您的预期。

但是,如果 tweedledeetweedledum正在使用其他一些 bool类型不是 _Bool , 那么所有的赌注都取消了。

关于c - 如果两个函数都返回 boolean 值,使用按位运算符组合它们是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com