一、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
輸出如下:
[root@szvphispra21673 ~]# ./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