next up previous contents
Next: 錯誤碼 errno Up: main 函式 Previous: 命令列參數   Contents

錯誤處理

  1. 在本章之前都沒要求主函式 main 回傳值,但一般程式執行結束後常要判斷該程式是否成功執行?還是不正常結束?在 Linux 文字界面下命令時,可以查看變數 $?,如果是 0 代表程式成功執行,非 0 的其他數字代表錯誤碼。
    [dywang@dyw219 zzz]$ ls mainfunc1.c
    mainfunc1.c
    [dywang@dyw219 zzz]$ echo $?
    0
    [dywang@dyw219 zzz]$ ls mainfunc1.cc
    ls: cannot access mainfunc1.cc: No such file or directory
    [dywang@dyw219 zzz]$ echo $?
    2
    
  2. 主程式回傳碼範例:當讀取參數無法轉成整數時退出主程式,並回傳錯誤碼 1。
    [dywang@dyw219 zzz]$ vim mainfun2.c
    [dywang@dyw219 zzz]$ cat mainfun2.c
    #include <stdio.h>
    
    int main( int argc, char *argv[] ) {
    	int i, sum=0, tmp;
    
    	for ( i=1; i<argc-1; i++) {
    		tmp = atoi(argv[i]);
    		if (tmp == 0) {
    			printf("%s NOT a number!\n", argv[i]);
    			return 1;
    		}
    		printf("%s+", argv[i]);
    		sum += atoi(argv[i]);
    	}
    	sum += atoi(argv[i]);
    	printf("%s=%d\n", argv[i], sum);
    	return 0;
    }
    
  3. 編譯
    [dywang@dyw219 zzz]$ gcc -o mainfun2 mainfun2.c
    
  4. 執行:輸入數字,成功計算並回傳 0。
    [dywang@dyw219 zzz]$ ./mainfun2 1 2 3 4
    1+2+3+4=10
    [dywang@dyw219 zzz]$ echo $?
    0
    
  5. 執行:輸入含有非數字 abc,退出程式並回傳錯誤碼 1。
    [dywang@dyw219 zzz]$ ./mainfun2 1 2 abc
    1+2+abc NOT a number!
    



De-Yu Wang 2019-08-14