今天为同事做代码审查时,我看到了一件奇怪的事情。他用这样的花括号括住了他的新代码:
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
它有时很好,因为它为您提供了一个新的范围,您可以在其中更“干净地”声明新的(自动)变量。
在C++中,这可能不是那么重要,因为您可以在任何地方引入新变量,但也许习惯来自C,直到C99才能做到这一点。:)
由于 C++ 具有析构函数,因此在范围退出时自动释放资源(文件、互斥体或其他任何东西)也很方便,这可以使事情变得更干净。这意味着您可以在更短的时间内保留某些共享资源,而不是在方法开始时抓住它。