閱讀雜項。與SDL開發相關的教程我發現了兩個不同的例子,以相同的方式做了相同的事情,但方式不同。我想知道從代碼「安全性」和可維護性的角度來看,你認爲哪兩個是正確的。如何使用C斷言來使代碼更安全?
在第一個示例,程序員不使用斷言在所有,但代碼看起來行(至少對於我的眼睛):
int main(){
SDL_Surface *screen;
/** Initialize SDL */
if(SDL_Init(SDL_INIT_VIDEO)!=0){
fprintf(stderr,"Unable to initialize SDL: %s",SDL_GetError());
}
atexit(SDL_Quit);
/** Sets video mode */
screen=SDL_SetVideoMode(640,480,16,SDL_HWSURFACE);
if(screen==NULL){
fprintf(stderr,"Unable to set video mode: %s",SDL_GetError());
}
return (0);
}
在第二示例中,程序員[其他]是使用不同的方法,像(代碼是不完全粘貼複製):
int main(){
SDL_Surface* screen;
/** Initialize SDL */
assert(SDL_Init(SDL_INIT_VIDEO)==0);
atexit(SDL_Quit);
/** Sets video mode */
screen=SDL_SetVideoMode(640,480,16,SDL_HWSURFACE);
assert(screen!=NULL);
return (0);
}
是否確定的,如果條件(從第一個例子)「替代」與斷言像在第二個例子嗎?
什麼是正確的策略(如果有的話)?
如果SDL_Init()失敗,則atexit對()和SDL_SetVideoMode()調用不應該讓 - 第一版本應該或者出口()在打印語句之後,或者代碼應該用'else'寫入以覆蓋剩下的動作。 – 2009-12-26 20:39:02