请教KEIL C51高手。。。。

[复制链接]
4289|24
 楼主| ayb_ice 发表于 2007-7-22 11:25 | 显示全部楼层 |阅读模式
C51, keil, se, TI, IO
如何防止编译器优化case 0:语句,因为这里没有做任何事情,所有被编译器优化掉了,但是我就是想让i==0时立刻退出,因为在大部情况下是i=0...
    switch(i){
    case 0:
        break;

    case 1:
        function1();
        break;
    case 2:
        function2();
        break;
    case 3:
        function3();
        break;
    }
mr.king 发表于 2007-7-22 11:47 | 显示全部楼层

C51 不如直接单独写if (i!=0)再进switch

古道热肠 发表于 2007-7-22 11:51 | 显示全部楼层

优化不等于出错

  最然优化掉了,但如果入口参数是0时,程序会退出Swith而执行后续语句,有何关系呢?
平常人 发表于 2007-7-22 12:01 | 显示全部楼层

编译器没有把它优化掉,只是把它合并到default的部分中

这样当然会有程序执行效率的损失,尤其(i==0)是多数情况。

所以LZ应该采取2楼的建议,直接判断(i!=0)后再进switch。
救火车 发表于 2007-7-22 12:28 | 显示全部楼层

这样行不?

    switch(i){
    case 0:
        goto your_end;
    case 1:
        function1();
        break;
...........................


your_end:
 楼主| ayb_ice 发表于 2007-7-22 13:48 | 显示全部楼层

随便说说

讨厌使用goto语句...
if也不要使用为好...
因为我的情况是switch有层嵌套,加if的话又会多缩进一层,程序不好看
   if(i){
       switch(i){
        case 0:
            break;
    
        case 1:
            function1();
            break;
        case 2:
            function2();
            break;
        case 3:
            function3();
            break;
        }
    }不知有否更好的方法...

hotpower 发表于 2007-7-22 14:02 | 显示全部楼层

switch的缺点就是逐次比较

估计要外加if()了.

用不用default和优化后的结果一样.
coldra 发表于 2007-7-22 14:08 | 显示全部楼层

有时候还不如全用if else语句替代switch

hotpower 发表于 2007-7-22 14:10 | 显示全部楼层

有时进行空间优化时switch比if else强,有时弱

真是这样的...俺试过.
doob 发表于 2007-7-22 19:27 | 显示全部楼层

switch 效率不高,但改成if 又太难看

lbx_00 发表于 2007-7-22 19:27 | 显示全部楼层

lz的switch case 语句忘了一件事情

case 最后一个常量后,要添加default: break;
hotpower 发表于 2007-7-22 19:45 | 显示全部楼层

和default没任何关系~~~

啊龙 发表于 2007-7-22 21:53 | 显示全部楼层

又要好看,又要不优化,又要效率.那就放个最短的无用指令吧!

xwj 发表于 2007-7-22 22:00 | 显示全部楼层

有病,“多缩进一层”有什么关系???

有什么不好看的?
 楼主| ayb_ice 发表于 2007-7-23 07:35 | 显示全部楼层

14L正解,我也想到这个最好的方法了...

zhaoyu2005 发表于 2007-7-23 07:57 | 显示全部楼层

就是有毛病,多缩进一行和好看有多大关系

只要对齐了就好看
jimoom 发表于 2007-7-23 08:47 | 显示全部楼层

优化不是更好!

既然=0不需要做任何事情,优化掉又没事,他自然会退出switch,做后续的事情。
sklar 发表于 2007-7-23 09:46 | 显示全部楼层

什么僻好?还要好看?能用就行了

什么僻好?还要好看?能用就行了
lenglx 发表于 2007-7-23 10:23 | 显示全部楼层

不想多缩进一层?

if(i=0)
{
// do something
   return;
}

switch(i)
{
//....
}

这样就不多缩进一层了.
gezhi 发表于 2007-7-23 14:49 | 显示全部楼层

就这样吧

case 0:
      _nop_();
      break;
不难看,效率又高了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15494

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部