C++/C中int main( int argc, char* argv[] ) 中arg和argv參數的解釋

一、main()的 聲明格式

​ 在示例程序中經常可以看到argc和argv這兩個參數 ,在調試代碼過程中遇到main函數爲int main( int argc, char* argv[] )這種類型時往往會報錯,或者是運行起來了但命令窗口一閃而過,沒有出來結果。網上關於這方面的資料也有點亂,在看淺墨大大一書發現其中有關於這一方面的講解甚爲詳細,抑制不住要與大家分享的衝動,現結合網上內容並予以實驗,整理如下:
​ 帶形參的main函數,如 main( int argc, char* argv[], char **env ) ,是UNIX、Linux以及Mac OS操作系統中C/C++的main函數標準寫法,並且是血統最純正的main函數寫法。
​ 在如今的Visual Studio編譯器中,main()函數帶有參數argc和argv或者不帶,即無論是否在函數體中使用argc和argv,返回值爲void或不爲void,都是合法的。
​ 即至少有如下三種寫法合法:

1、返回值爲整型帶參的main函數

int main( int argc, char** argv )
{ 
     //函數體內使用或不使用argc和argv都可
     ……
     return 0;
}

2、返回值爲整型不帶參的main函數

int main( int argc, char** argv )
{ 
     //函數體內使用了argc或argv
     ……
     return 0;
}

3、返回值爲void且不帶參的main函數

void main()
{ 
     ……
}

一、argc、argv的具體含義
argc和argv參數在用命令行編譯程序時有用。main( int argc, char* argv[], char \*\*env ) 中 第一個參數,int型的argc,爲整型,用來統計程序運行時發送給main函數的命令行參數的個數,在VS中默認值爲1。
第二個參數,char*型的argv[],爲字符串數組,用來存放指向的字符串參數的指針數組,每一個元素指向一個參數。各成員含義如下:
argv[0]指向程序運行的全路徑名
argv[1]指向在DOS命令行中執行程序名後的第一個字符串
argv[2]指向執行程序名後的第二個字符串
argv[3]指向執行程序名後的第三個字符串
argv[argc]爲NULL
第三個參數,char**型的env,爲字符串數組。env[]的每一個元素都包含ENVVAR=value形式的字符串,其中ENVVAR爲環境變量,value爲其對應的值。平時使用到的比較少。

二、調試方法

arg.c 如下, 測試下傳多個參數

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char ** argv)
{
    int i;
    for (i = 0; i < argc; i++)
        printf("Argument %d is %s\n", i, argv[i]);
    return 0;
}

gcc -o arg argc1.c

./arg -a=symbol-location -c=2 .\test.c -p compile_commands.json

輸出如下:

[[email protected] ~]# ./arg -a=symbol-location -c=2 .\test.c -p compile_commands.json
Argument 0 is ./arg
Argument 1 is -a=symbol-location
Argument 2 is -c=2
Argument 3 is .test.c
Argument 4 is -p
Argument 5 is compile_commands.json

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章