有了这个定义,我们执行下面的循环就可以使CPU一直等待该按钮被按下:
while ((IOPDATA & button) == 0)
;
然而这个期望必须建立在编译器不对代码进行优化的前提假设之上。如果编译器优化这段代码,那么它会认为在这个循环中没有什么会改变IOPDATA而且认为条件判断结果总是真或假,最终优化的结果是只对(IOPDATA & button)==0判断一次,之后的循环都不在对其进行判断,其等同于:
if ((IOPDATA & button) == 0)
for (;;)
;