今天为同事做代码审查时,我看到了一件奇怪的事情.他用这样的花括号包围了他的新代码:
Constructor::Constructor()
{
existing code
{
New code: do some new fancy stuff here
}
existing code
}
Run Code Online (Sandbox Code Playgroud)
如果有的话,结果是什么?这可能是什么原因?这种习惯来自哪里?
编辑:
根据输入和下面的一些问题,我觉得我必须在问题上添加一些,即使我已经标记了答案.
环境是嵌入式设备.C++服装中包含许多遗留的C代码.有很多C转向C++开发人员.
这部分代码中没有关键部分.我只在代码的这一部分中看到过它.没有完成主要的内存分配,只是设置了一些标志,而且有点笨拙.
大括号包围的代码类似于:
{
bool isInit;
(void)isStillInInitMode(&isInit);
if (isInit) {
return isInit;
}
}
Run Code Online (Sandbox Code Playgroud)
(不要介意代码,只需坚持花括号......;))花括号之后还有一些比特麻烦,状态检查和基本信号.
我与那个人谈过,他的动机是限制变量的范围,命名冲突,以及其他一些我无法真正接受的冲突.
从我的POV看起来相当奇怪,我不认为花括号应该在我们的代码中.我在所有答案中都看到了一些很好的例子,说明为什么用花括号包围代码,但是你不应该把代码分成方法吗?
C风格语言中的匿名{}块的目的是什么(C,C++,C#)
示例 -
void function()
{
{
int i = 0;
i = i + 1;
}
{
int k = 0;
k = k + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 感谢所有优秀的答案!
在C#中,您可以在未附加到任何其他语句的方法中创建块.
public void TestMethod()
{
{
string x = "test";
string y = x;
{
int z = 42;
int zz = z;
}
}
}
Run Code Online (Sandbox Code Playgroud)
此代码编译并运行,就像主方法中的大括号不存在一样.还要注意块内部的块.
有没有这种情况有价值?我还没有找到,但我很想知道其他人的发现.