gpt4 book ai didi

在 ANSI C 的控制流语句中组合比较测试

转载 作者:行者123 更新时间:2023-11-30 14:24:15 29 4
gpt4 key购买 nike

我试图记住,使用标准 c 编译器 (C89),下面的两个 if 语句是否会以相同的方式进行计算。

片段 1:

boolean function(formattype* format)
{
if(format != null && (*format == format1 || *format == format2 || *format == format3) )
return true;
else
return false;
}

将以与代码片段 2 相同的方式进行评估:

boolean function(formattype* format)
{

if(format != null && (*format == format1 || format2 || format3) )
return true;
else
return false;
}

我只对第二次比较的评估感兴趣,并且我添加该功能只是为了说明目的。我似乎记得使用一些类似的方法来使用每个 || 参数来评估 == ,而无需将它们全部键入,但不记得具体细节。

编辑:也许这个函数让事情变得更加困惑,而不是它所帮助说明的。

我正在尝试评估以下内容

if(format != null && (*format == format1 || *format == format2 || *format == format3) )

第一个只是为了防止取消引用空指针而进行的检查,因此请忽略它。后三个是查看取消引用的格式指针是否等于三种不同格式类型中的任何一种(如果您必须知道,它们位于枚举中)。

我不想使用宏,我想简化比较。也许不可能,我只是模糊地记得执行过类似的操作。

我认为这与第二个示例类似。

if(format != null && (*format == format1 || format2 || format3) )

最佳答案

不,不会。虽然第一次检查有效,但第二次检查会给您错误的结果。它的基本意思是:“If (*format equals format1) OR (format2 is nonzero) OR (format3 is nonzero)” - 假设 format2 或 format3 中的任何一个不为零,则其计算结果将始终为 true。

您可能想篡改按位运算符。如果格式 1、2 和 3 是不同的 2 的幂,那么您可以使用以下命令检查 *format 是否是其中之一:

if (*format & (format1 | format2 | format3))

不是按位(与逻辑相反)ANDOR 运算符。但是,这种方法并不安全 - 即使 format 指向的内存是一些格式 1、2 和 3 常量的总和(假设 formattype 是整型)。

关于在 ANSI C 的控制流语句中组合比较测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063411/

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