Chinaunix首页 | 论坛 | 博客
  • 博客访问: 447580
  • 博文数量: 111
  • 博客积分: 4290
  • 博客等级: 上校
  • 技术积分: 1301
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 14:22
个人简介

努力工作,建立一个幸福的家庭。

文章分类

全部博文(111)

文章存档

2015年(4)

2013年(9)

2012年(6)

2011年(17)

2010年(69)

2009年(6)

分类: WINDOWS

2011-03-09 22:46:00

在调试中怎会碰到一些平时注意不到问题,当时写程序的时候,自己认为可以按照自己的方式运行,但实际的结果却不并不是这样的。机器不善解人意哈。
直接上程序:
1: case和if的区别(变量作用域的区别):
在下面的代码中,注意红色标记的if语句。假如没有该if语句,那么编译过程中,会出现pPort redefine
的错误。

        switch (outPortTy) //查找该输出端口

        {
            case COMPLEXCHAR_USERPORT:                
                if (this->Ports[i]->getPortId() == OutPortId){
                    complexChar_u *pPort;
                    pPort = (complexChar_u*)this->Ports[i]; //端口类型强制转换

                    pPort->connectPort(InPortId);
                }
                break;                
            case REALCHAR_USERPORT:
                if (this->Ports[i]->getPortId() == OutPortId){
                    realChar_u *pPort;
                    pPort = (realChar_u *)this->Ports[i];
                    pPort->connectPort(InPortId);
                }
                break;
            default:
                break;
        }


2,for语句等,中变量的生命期。

如果将红色中int i,定义到黄色的区别中// for(int i=0; i< CC.CurrentWorkers; i++)

则会出现绿色部分程序出现 i undefined,的错误。

    int i =0, j = 0, k = 0;
    //查找要连接的组件
    // for(int i=0; i< CC.CurrentWorkers; i++)
    for (i=0; i < CC.CurrentWorkers; i++)
    {
        //lookup dest worker

        for (j=0; j < CC.Workers[i]->getNumPorts(); j++)
        {
            //lookup dest port

            if (CC.Workers[i]->Ports[j]->getPortId() ==PortId){
                k = 1; //找到要连接的组件

                break;
            }
        }
        if (k == 1){ //找到要连接的组件,跳出整个循环

            break;
        }
    }
    
    destPort = (complexChar_p *)CC.Workers[i]->Ports[j];


阅读(722) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~