首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要用大括号把C代码块括起来呢?

为什么要用大括号把C代码块括起来呢?
EN

Stack Overflow用户
提问于 2009-11-05 09:25:51
回答 9查看 29.5K关注 0票数 66

我正在看一些C代码,注意到代码块周围充满了花括号,没有任何类型的控制结构。看一看--看:

代码语言:javascript
复制
//do some stuff . . .
fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
{
    //a block! why not?
    char *tmp_argv[3];
    tmp_argv[0] = argv[0]; tmp_argv[1] = str; tmp_argv[2] = prefix;
    t = clock();
    fprintf(stderr, "[bwa_index] Convert nucleotide PAC to color PAC... ");
    bwa_pac2cspac(3, tmp_argv);
    fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
}

为什么要在代码中插入这样的代码块呢?它充满了它们。有什么性能上的好处吗?一些神秘的C语言?为什么?

编辑:这段代码来自BWA,这是一个生物信息学程序,它使用Burrows-Wheeler transform将小的序列与大的参考序列进行比对,如果你们中的任何人想知道的话。此代码示例与应用程序的功能不是特别相关。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-11-05 09:31:01

遗留代码需要{}才能进行声明

在C89中,您不能在任何地方执行int i;;声明只在块的开头有效。

所以:

代码语言:javascript
复制
a = 1;
int i; /* error */
i = 2;

...无效,但是

代码语言:javascript
复制
a = 1
if (e) {
  int i;

...was很好,就像一个普通的块一样。

即使在声明变得有效(C99)块项之后,最终的样式仍然存在,部分原因是惯性,部分原因是向后可移植性,还因为为新声明建立一个作用域是有意义的。

票数 94
EN

Stack Overflow用户

发布于 2009-11-05 09:28:21

确定变量的作用域。例如,变量tmp_argv仅在大括号之间有效。

票数 41
EN

Stack Overflow用户

发布于 2009-11-05 21:41:25

我最近发现的另一个用例是,当你有打开/关闭语义,并且你想清楚地标记“内部”代码时:

代码语言:javascript
复制
f = fopen('file');
{
    // do stuff
}
fclose(f);

这可以很好地提醒您关闭/释放对象,并使代码更加简洁。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1677778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档