C++函数中return语句后的指令

3

我在ROS kobuki节点(kobuki-auto-docking)中看到了这个C++函数。我想知道while循环是否是死代码?还是说它有时会被神秘地调用?

void AutoDockingROS::spin()
{
    return;

    while(!shutdown_requested_){;}
}

感谢您的帮助,

谢谢您的支持,


1
这是死代码,无法到达。 - rnrneverdies
2
这显然是死代码。看起来像是程序员添加了 return; 来修复一个 bug 或者其他问题(也许是无意中调用了 spin),然后就把它留在了代码库中。(该函数的意图显然是要一直 旋转 直到关闭) - nneonneo
1
也许是为了防止返回失败的保险措施?(开个玩笑。) - user1196549
5个回答

5

在C++中,return后面的任何内容都不会被执行。

但是,在编写代码时应该尊重眼前的代码:

  1. 如果预处理器将#define return定义为特定的构建配置,则可能会运行代码。

  2. 有人可能正在盲目地将代码移植到Java。在Java中,finally块中的代码return之后运行。

  3. 开发人员保留该行代码以测试!shutdown_requested_的语法有效性是有可能的。

这些情况都很少见(我曾经在生产环境中看到第一种情况),但如果您要进行大规模的重构工作,最好检查一下。


感谢Bathsheba的回答。 实际上,我想知道是否有可能执行代码的这一部分。这似乎不是您的场景之一,但我会记在心里。谢谢! - mlel
1
如果您能告诉我们那个“生产”名称,以便知道要避免什么,那将很酷。 - Roman L
1
这是ROS框架的开源代码。问题中提供了链接:这里,或者在github上也可以找到。 - mlel

3

这相当于:

void AutoDockingROS::spin()
{
    return;

    // while(!shutdown_requested_){;}
}

实际上,程序员想留下一些代码作为提醒。这部分代码永远不会被执行。


3

return语句之后的所有内容都不会被执行。


2
没有人可以在“return”之后调用代码……也许只有Chuck Norris可以……

0

return语句后面的代码只有在满足条件时才会被执行。请将代码放在return语句之前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接