【发布时间】:2016-10-11 17:12:33
【问题描述】:
考虑以下几点:
int status = 0;
while(status < 3)
{
switch(status)
{
case 0:
// Do something
break;
case 1:
if(cond1 && cond2 || cond3 && cond4)
; // status = 1
else if(cond5)
status = 2;
else
status = 0;
// there could be more else-if statements
break;
case 2:
// Do something else
break;
}
status++;
}
鉴于第一个 if 语句只是为了可读性而存在,并且如图所示,它的主体是空的(因为冗余),我想知道编译器如何(提前或只是-in-time 编译器)可能会对此进行优化(如果可以进行任何优化)。
【问题讨论】:
-
这段代码没有多大意义,在某些情况下会造成无限循环。
-
第一个
if有效。它限制了else的范围。 -
@PM77-1 当然不是,但这不是重点。我实际上认为它可以在最后一个 else 语句中被否定,使其成为 else-if 语句,但我不确定。尝试查看程序集输出,但没有任何运气。
标签: optimization language-agnostic