下面的两个代码片段是否完全相同?
do
{
Delay_us(1);
status = fetchStatus();
}while(!status);
第二个片段 - >
do
{
Delay_us(1);
}while(status = fetchStatus(), !status);
哪个更好?
答案 0 :(得分:7)
你可以这样做:
do
{
Delay_us(1);
} while( !fetchStatus() );
如果您不使用它,则无需创建局部变量。
答案 1 :(得分:4)
是的,他们也这样做,但我更喜欢以下内容:
do {
Delay_us(1);
} while (!(status = fetchStatus()));
因为它将所有内容简化为一个语句,而不是两个语句。
答案 2 :(得分:1)
它们具有相同的逻辑输出。在每种情况下都会分配状态然后进行评估,但第一种情况更具可读性。一般不要使用逗号运算符。
答案 3 :(得分:1)
它们是等价的。因为它们是等价的,所以两者都不是优选的。然而,有些人可能更喜欢美学,因为它更熟悉。
你真的打算在第一次检查状态之前推迟吗?
答案 4 :(得分:0)
我不是专家,但我相信我们正在进入编译器优化的领域。它实际上取决于您使用哪个编译器从该代码生成二进制文件。一个编译器可能会像第一个代码片段一样获取代码,并将其优化为二进制代码,从而有效地完成第二个代码片段的操作。
答案 5 :(得分:0)
怎么样:
for(; !fetchStatus(); Delay_us(1));