以下兩種方法之一在另一種方法中是否有優勢?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