以下两种方法之一在另一种方法中是否有优势?C变量声明和错误处理优先级的最佳实践
这是第一次测试,fopen
是否成功都和然后所有的变量声明发生,以确保它们不会进行,因为它们不能不得不
void func(void) {
FILE *fd;
if ((fd = fopen("blafoo", "+r")) == NULL) {
fprintf(stderr, "fopen() failed\n");
exit(EXIT_FAILURE);
}
int a, b, c;
float d, e, f;
/* variable declarations */
/* remaining code */
}
这恰恰相反。所有的变量声明发生,即使fopen
失败
void func(void) {
FILE *fd;
int a, b, c;
float d, e, f;
/* variable declarations */
if ((fd = fopen("blafoo", "+r")) == NULL) {
fprintf(stderr, "fopen() failed\n");
exit(EXIT_FAILURE);
}
/* remaining code */
}
没有第二种方法产生任何额外费用,当fopen
失败? 很想听听你的想法!
为什么要优化exit(EXIT_FAILURE)分支的路径?你期望它发生很多? – u0b34a0f6ae 2010-06-13 11:53:47
这只是一个例子来指代一个更一般的结构。 – guest 2010-06-13 11:54:47
[如何处理条件初始化,这是一个很好的做法?](http://stackoverflow.com/questions/16102683/how-is-conditional-initialization-handled-and-is-it-a-good -ractract) – tne 2014-02-23 16:37:57