开关柜避免环路
switch case avoid loop
我有以下代码:
int send_cmd( int sock, char * buffer, int lbuffer )
{
int err = 0;
//do_something part 1
while(1)
switch(check_status(buffer)){
case 1:
return 0;
break;
case 0:
if (err > 0)
break;
//do_something part 2
err = 1;
}
return -1;
}
我不认为这是很好的编码,但我不知道如何优化它。
我想只运行"第二部分代码"一次,并且只有当"第一部分代码"出错时才运行。
你能告诉我如何使它正确运行吗?
我想只运行"第二部分代码"一次,并且只有当"第一部分代码"出错时才运行。
不需要while循环或switch语句
// Do something part 1
if (check_status(buffer) == 1) {
return 0;
}
// Do something part 2
if (check_status(buffer) == 1) {
return 0;
}
else {
return -1;
}
如果您不需要循环,您可以只使用if
和return
。既然你不使用err
,你也可以省略它。
// first command
int status = check_status(buffer);
if (status == 1)
return 0;
// second command
status = check_status(buffer);
if (status == 1)
return 0;
return -1;
至少在这个简单的情况下,switch
并不比if
更好或更快。也许在某些情况下,这是正确的,但我不会打赌。通常,无论您使用switch还是if,优化器都足以发出最优的机器码。因此,选择简单、易读和可维护的代码。
看你的,我认为这是你试图实现使用err
变量:
//Part 1
if ( check_status(buffer) ) return 0; //No error
//Part 2
if ( check_status(buffer) ) return 1; //One error
else return -1; //Two errors
你不需要任何while循环来做这个。
相关文章:
- 普通环路未使用gcc 4.8.5自动矢量化
- C++ - 标准输入环路
- 如何在arduino或Raspberrypi上制作600MHz环路?
- 为什么在环路条件中使用'<='而不是'<'会产生分段错误 [SIGSEGV]?
- 使用 std::mutex 保护环路
- 在信号槽机制与传统环路之间做出决定
- 在环路中使用 UDP 套接字时连接被拒绝
- 临时参考 C++11 上的环路的远程基座
- OpenMP 环路阵列访问中的错误共享
- 环路内开关的性能
- QT中的无限环路
- 超过8个字符的字符串导致无限环路C
- 用指针清理队列时,无尽的环路
- 无盖插座的紧密RECV环路
- 在环路中使用模数会导致分段错误(磁芯转储)
- 优化环路C
- 默认构造的地图迭代器以增量进入无限环路 - 绿色山丘编译器
- C 无限环路:递归函数
- C++范围基于for环路提供SIGABRT,而正常环路工作正常
- 开关柜避免环路