есть ли преимущество в одном из следующих двух подходов по сравнению с другим?
здесь сначала проверяется, удастся ли вообще 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
терпит неудачу?хотел бы услышать ваши мысли!