void err_dump(const char *fmt, ...) { va_list ap; va_start(ap, fmt);//初始化ap err_doit(1, errno, fmt, ap); va_end(ap);//全部參數處理完畢以後,退出函數前,調用。 abort(); exit(1); } static void err_doit(int errnoflag, int error, const char *fmt, va_list ap) { char buf[MAXLINE]; //構造錯誤輸出 vsnprintf(buf, MAXLINE - 1, fmt, ap); if(errnoflag) snprintf(buf + strlen(buf), MAXLINE - strlen(buf) - 1, ": %s", strerror(error)); strcat(buf, "\n"); //輸出到標準錯誤輸出 fflush(stdout); fputs(buf, stderr); fflush(NULL);//沖洗全部輸出流 }
(1)K&C<232>
函數
<stdarg.h>:提供遍歷未知數目和類型的函數參數表的功能。spa
此處fmt是最後一個命名的形式參數。函數內聲明的類型爲va_list的變量ap,依次指向每一個實際參數。code
(2)orm
vsnprintf函數進程
int vsnprintf(char *str, size_t size, const char *format, va_list ap);it
snprintf函數form
int snprintf(char *str, size_t size, const char *format, ...);//此函數超過緩衝區尾端的全部字符都會被丟棄。class
(3)變量
abort函數:使程序異常終止,將信號SIGABRT信號發送給調用進程。遍歷