打印

请教KEIL C51高手。。。。

[复制链接]
2760|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。

使用特权

评论回复
5
救火车| | 2007-7-22 12:28 | 只看该作者

这样行不?

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


your_end:

使用特权

评论回复
6
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;
        }
    }不知有否更好的方法...

使用特权

评论回复
7
hotpower| | 2007-7-22 14:02 | 只看该作者

switch的缺点就是逐次比较

估计要外加if()了.

用不用default和优化后的结果一样.

使用特权

评论回复
8
coldra| | 2007-7-22 14:08 | 只看该作者

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

使用特权

评论回复
9
hotpower| | 2007-7-22 14:10 | 只看该作者

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

真是这样的...俺试过.

使用特权

评论回复
10
doob| | 2007-7-22 19:27 | 只看该作者

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

使用特权

评论回复
11
lbx_00| | 2007-7-22 19:27 | 只看该作者

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

case 最后一个常量后,要添加default: break;

使用特权

评论回复
12
hotpower| | 2007-7-22 19:45 | 只看该作者

和default没任何关系~~~

使用特权

评论回复
13
啊龙| | 2007-7-22 21:53 | 只看该作者

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

使用特权

评论回复
14
xwj| | 2007-7-22 22:00 | 只看该作者

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

有什么不好看的?

使用特权

评论回复
15
ayb_ice|  楼主 | 2007-7-23 07:35 | 只看该作者

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

使用特权

评论回复
16
zhaoyu2005| | 2007-7-23 07:57 | 只看该作者

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

只要对齐了就好看

使用特权

评论回复
17
jimoom| | 2007-7-23 08:47 | 只看该作者

优化不是更好!

既然=0不需要做任何事情,优化掉又没事,他自然会退出switch,做后续的事情。

使用特权

评论回复
18
sklar| | 2007-7-23 09:46 | 只看该作者

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

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

使用特权

评论回复
19
lenglx| | 2007-7-23 10:23 | 只看该作者

不想多缩进一层?

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

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

这样就不多缩进一层了.

使用特权

评论回复
20
gezhi| | 2007-7-23 14:49 | 只看该作者

就这样吧

case 0:
      _nop_();
      break;
不难看,效率又高了吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15417

帖子

34

粉丝