我知道{}
是用来分隔函数,类和条件分支等实体,但他们还有什么其他用途?在C中实际使用额外的大括号
#import <stdio.h>
int main(void) {
{{{
printf("main\n");
}}}
return 0;
}
编辑:
我发现,它可能是有用的,主要用于信息隐藏,用nested functions一起。从下面的答案看来,它们似乎可以在调试过程中用作标记,并在发行版中被删除,但这不应该被认可。
我知道{}
是用来分隔函数,类和条件分支等实体,但他们还有什么其他用途?在C中实际使用额外的大括号
#import <stdio.h>
int main(void) {
{{{
printf("main\n");
}}}
return 0;
}
编辑:
我发现,它可能是有用的,主要用于信息隐藏,用nested functions一起。从下面的答案看来,它们似乎可以在调试过程中用作标记,并在发行版中被删除,但这不应该被认可。
括在括号{
}
一个代码创建一个Scope。
创建本地范围可以有类似的原因号码:
#include<stdio.h>
int main()
{
int i = 10;
{
int i = 5;
printf("i is [%d]\n",i);
}
printf("i is [%d]\n",i);
return 0;
}
在你的示例代码,
额外{
& }
不会起任何作用,他们只是冗余代码。
正如@马丁建议在意见,因为在{{{
& }}}
封闭代码仅仅是类似于{
& }
,它可能被用作容易搜索的标签/模式。然而,就个人而言,我更希望为代码添加适当的评论,并在关键字中显示搜索结果,而不是添加此类冗余代码。
所以我想你可以用它来将一组函数中的一组进程分成组 – 2012-01-27 03:53:30
可能是一个标记,用于在发布 – 2012-01-27 03:54:17
@AramKocharyan中搜索和替换“{{{”和“/ *”:警告:该词* Process *具有不同的含义,特别是当你在c语境下讲话时。要回答你的评论,是的,你可以使用'''''将你的函数的* sections *逻辑地分组到不同的作用域。 – 2012-01-27 04:02:54
该语法(连续三个花括号)并不意味着标准C中的任何特殊内容。此类代码的作者可能会使用它来指示内部代码的某些内容,例如它只是用于调试。
额外的大括号给你作为阿尔斯提到的范围。这可以有效地用于智能指针的情况。例如,考虑在C++(MSVC编译器)下面的代码
int i = 0;
i++;
//More code follows
...
{
CComBSTR bstr("Hello");
//use this bstr in some code
.....
}
结束括号后,bstr
将不可用。而且,因为它已经超出了范围,所以析构函数也会自动调用。
这是标签c。 – 2012-01-27 03:55:00
因此,作用域可以用来确保执行某些东西,但是当堆栈帧返回到原始函数时,它会从本地作用域中删除? – 2012-01-27 03:56:25
你可以引入一个新的范围,然后允许你引入新的变量....这在C89中可能有用。虽然不太正常,但偶尔有用。
{
int x =2 ;
printf("%d", x);
{
int y = 7;
printf("%d", y);
}
}
我想知道的是为什么他们有用。它是用于内存管理还是安全性,还是逻辑上将代码分离? – 2012-01-27 03:58:48
主要它们对于在“if”或“while”或“for”之后引入新的代码块很有用:) – 2012-01-27 08:34:43
在C89的函数中定义新的局部变量。 – osgx 2012-01-27 03:50:02
但是没有'{}'的返回会有什么用? – 2012-01-27 03:51:22
*根据C标准,C中不允许嵌套函数*。您无法在C中定义另一个函数的本地函数。然而,您可以在另一个函数内声明函数.GCC提供了[编译器扩展](http:// gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html)来支持嵌套函数,但是使用它会使你的代码在其他编译器中不可移植。 – 2012-01-27 04:49:58