我正在看一些C代码,注意到代码块周围充满了花括号,没有任何类型的控制结构。看一看--看:
//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将小的序列与大的参考序列进行比对,如果你们中的任何人想知道的话。此代码示例与应用程序的功能不是特别相关。
发布于 2009-11-05 09:31:01
遗留代码需要{}才能进行声明
在C89中,您不能在任何地方执行int i;
;声明只在块的开头有效。
所以:
a = 1;
int i; /* error */
i = 2;
...无效,但是
a = 1
if (e) {
int i;
...was很好,就像一个普通的块一样。
即使在声明变得有效(C99)块项之后,最终的样式仍然存在,部分原因是惯性,部分原因是向后可移植性,还因为为新声明建立一个作用域是有意义的。
发布于 2009-11-05 09:28:21
确定变量的作用域。例如,变量tmp_argv
仅在大括号之间有效。
发布于 2009-11-05 21:41:25
我最近发现的另一个用例是,当你有打开/关闭语义,并且你想清楚地标记“内部”代码时:
f = fopen('file');
{
// do stuff
}
fclose(f);
这可以很好地提醒您关闭/释放对象,并使代码更加简洁。
https://stackoverflow.com/questions/1677778
复制相似问题