参考了云风的<我的游戏编程感悟> inline void _myassert(char* str, char* fname, int lineno) { fprintf(stderr, "error: %s in %s at %d/n", str, fname, lineno); abort(); } #ifdef _DEBUG #define ASSERT(c) if(c) 0; else _myassert(#c, __FILE__, __LINE__) #else #define ASSERT(c) 0 #endif 而这位老兄的错误处理则更详细了 http://blog.csdn.net/benkaoya/archive/2008/10/30/3187154.aspx __inline void PrintError(LPSTR linedesc, LPSTR filename, int lineno, DWORD errnum) { LPSTR lpBuffer; char errbuf[256]; char modulename[MAX_PATH]; DWORD numread; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, errnum, LANG_NEUTRAL, (LPTSTR)&lpBuffer, 0, NULL ); GetModuleFileName(NULL, modulename, MAX_PATH); wsprintf(errbuf, "/n%s occur failed at line %d in %s:/n/n" " %s/n/nReason: %s/n", modulename, lineno, filename, linedesc, lpBuffer); #ifndef _WINDOWS WriteFile(GetStdHandle(STD_ERROR_HANDLE), errbuf, strlen(errbuf), &numread, FALSE ); Sleep(3000); #else MessageBox(GetActiveWindow(), errbuf, modulename, MB_ICONWARNING|MB_OK|MB_TASKMODAL|MB_SETFOREGROUND); #endif exit(EXIT_FAILURE); }