在调试中怎会碰到一些平时注意不到问题,当时写程序的时候,自己认为可以按照自己的方式运行,但实际的结果却不并不是这样的。机器不善解人意哈。
直接上程序:
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) |