可能重复:
Practical use of extra braces in C
Unnecessary curly braces in C++?
大括号的用法是什么,例如如下所示:
int var;
{
some coding...
...
}
大括号前没有函数名,也没有typedef等。
更新: 我在gwan sqlite.c例子http://gwan.com/source/sqlite.c中找到了这段代码 我在下面部分引用它:
...some coding
sqlite3_busy_timeout(db, 2 * 1000); // limit the joy
// -------------------------------------------------------------------------
// create the db schema and add records
// -------------------------------------------------------------------------
{ //<-- here is the starting brace
static char *TableDef[]=
{
"CREATE TABLE toons (id int primary key,"
"stamp int default current_timestamp,"
"rate int,"
"name text not null collate nocase unique,"
"photo blob);",
// you can add other SQL statements here, to add tables or records
NULL
};
sqlite3_exec(db, "BEGIN EXCLUSIVE", 0, 0, 0);
int i = 0;
do
{
if(sql_Exec(argv, db, TableDef[i]))
{
sqlite3_close(db);
return 503;
}
}
while(TableDef[++i]);
// add some records to the newly created table
sql_Exec(argv, db,
"INSERT INTO toons(rate,name) VALUES(4,'Tom'); "
"INSERT INTO toons(rate,name) VALUES(2,'Jerry'); "
"INSERT INTO toons(rate,name) VALUES(6,'Bugs Bunny'); "
"INSERT INTO toons(rate,name) VALUES(4,'Elmer Fudd'); "
"INSERT INTO toons(rate,name) VALUES(5,'Road Runner'); "
"INSERT INTO toons(rate,name) VALUES(9,'Coyote');");
sqlite3_exec(db, "COMMIT", 0, 0, 0);
// not really useful, just to illustrate how to use it
xbuf_cat(reply, "<br><h2>SELECT COUNT(*) FROM toons (HTML Format):</h2>");
sql_Query(argv, db, reply, &fmt_html, "SELECT COUNT(*) FROM toons;", 0);
} //<-- here is the ending brace
...some coding
答案 0 :(得分:3)
语句可以分组为blocks,大括号表示块的开始和结束。函数体是一个块。 Blocks引入了一个新的变量范围,该范围从左大括号开始,到结束大括号结束。
你所拥有的是一块。
答案 1 :(得分:2)
没有功能名称的大括号使用
我想这不是答案,而是关注为什么这样做。
例如,您可以使用不同的类型重新使用变量名来执行其他操作(SQLite示例执行此操作以便在从头开始重新启动时使用相同的术语,而不是冒着命名冲突的风险):
{
int i = 2;
...
{
int i = 10; // this is a different variable
// the old value of 'i' will be restored once this block is exited.
}
}
{
void *i = alloca(16 * 1024); // this memory will be freed automatically
... // when the block will be exited
}
但是这也允许你释放在alloca()
堆栈上分配的内存,如上所述。
这也清楚地表明编译器不再需要块中定义的变量(这对于确保为其他任务释放CPU寄存器非常有用)。
如您所见,定义范围可以使用化妆品和技术。这两个都很有用。
答案 2 :(得分:1)
在{}
中为局部变量创建新范围例如C
:
fun(){
int i; // i -1
{
int i; // i -2 its new variable
}
}