小编典典

C ++中不必要的花括号

all

今天为同事做代码审查时,我看到了一件奇怪的事情。他用这样的花括号括住了他的新代码:

Constructor::Constructor()
{
   // Existing code

   {
      // New code: do some new fancy stuff here
   }

   // Existing code
}

如果有的话,结果是什么?这样做的原因可能是什么?这种习惯从何而来?

环境是嵌入式设备。有很多遗留的 C 代码包裹在 C 服装中。有很多 C 转向 C 开发人员。

这部分代码没有关键部分。我只在这部分代码中看到过。没有完成主要的内存分配,只是设置了一些标志,还有一些小玩意。

花括号包围的代码类似于:

{
   bool isInit;
   (void)isStillInInitMode(&isInit);
   if (isInit) {
     return isInit;
   }
}

(不要介意代码,只要坚持花括号......;))在花括号之后还有一些更多的小玩意,状态检查和基本信号。

我和那个人谈过,他的动机是限制变量的范围、命名冲突以及其他一些我无法真正理解的东西。

从我的角度来看,这似乎很奇怪,我认为花括号不应该出现在我们的代码中。我在所有答案中都看到了一些很好的例子,说明为什么可以用花括号括起代码,但你不应该将代码分成方法吗?

fsdf

阅读 70

收藏
2022-06-30

共1个答案

小编典典

它有时很好,因为它为您提供了一个新的范围,您可以在其中更“干净地”声明新的(自动)变量。

C++中,这可能不是那么重要,因为您可以在任何地方引入新变量,但也许习惯来自C,直到C99才能做到这一点。:)

由于 C++
具有析构函数,因此在范围退出时自动释放资源(文件、互斥体或其他任何东西)也很方便,这可以使事情变得更干净。这意味着您可以在更短的时间内保留某些共享资源,而不是在方法开始时抓住它。

2022-06-30