几天前,我看到for ( ; ; )
导致无限循环。这让我对两件事感到好奇。
答案 0 :(得分:6)
从C角度回答:
不,;
不会转换为无操作指令。无操作指令(例如nop
)是明确的汇编级指令,它们实际上倾向于< em>做的东西(因为它们消耗时间,但不一定影响CPU中的任何存储状态)。
for(;;)
代码段是for
循环,其中三个部分均为默认值。在这种情况下,您可以将;
视为不是空语句,而是(a)部分的分隔符。
过去,我曾犯过使用以下内容的令人发指的罪行:
#define ever ;;
#define forever for (;;)
这样我就可以编写无限循环:
for(ever) { ... }
forever { ... }
我当然不会这样做。
(a)一个“真正的”空陈述:
if (condition) {
a = b;
;
}
也可能不会转化为无操作。很可能它根本不会产生任何代码。
请记住,这是基于相当常见的行为。就C而言,;
可以生成它想要的任何低级代码,只要它不影响作为C环境的“虚拟机”即可。例如,如果您启用了性能分析,它可能会增加隐藏的行号变量并更新覆盖率统计信息。