1. 程式人生 > >C++中main函式的引數

C++中main函式的引數

C++中main函式的引數

問題

對於一個C/CPP檔案來說,一般都有main函式,一個程式的執行一定會是先從main函式這個入口開始,一個最基本的程式框架大概長這樣:

#include <stdio.h>
int main()
{
    return 0;
}

但是,我們有時候看到的main函式這個括號裡面還有別的東西,比如:

#include <stdio.h>
int main(int argc, char *argv[])
{
    return 0;
}

或者

#include <stdio.h>
int main
(int argc, char **argv) { return 0; }

那麼問題來了,這個argcargv有什麼用呢,為什麼會有這個東西,有沒有這個東西貌似對程式的執行並沒有什麼影響.

問題的探究

首先很容易看出char **argvchar *argv[]是等價的,無非是同一種東西兩種寫法。

argcint型的,我們可以做一個測試,我們嘗試列印一下這個值,看看它是什麼?

我們可以測試一下以下程式:

#include <stdio.h>
int main(int argc, char **argv)
{
    printf("%d\n",
argc); return 0; }

編譯:g++ main.cpp -o main,執行./main,然後做一個測試,如圖:

從圖中一共進行了三次測試:

  • 第一次:輸入./main,然後程式執行結果是1
  • 第二次:輸入./main 1 2,程式執行結果是3
  • 第三次:輸入./main 1 2 3 4 5 6,程式執行結果是7

答案已經很明顯了,argc獲取到了這個可執行程式一共接受到了多少個引數,第一個只有./main這一個引數,後面的./main 1 2 3 4 5 6一共有7個。

那麼還有第二個問題,char **argv這個裡面是什麼,我們繼續探究,寫一個程式把這裡面的東西打印出來:

#include <stdio.h>
int main(int argc, char **argv)
{
    printf("argc = %d\n", argc);
    for (int i = 0; i < argc; i++)
        printf("%s\n", argv[i]);
    return 0;
}

然後進行測試:

我們可以看出,argv實際上儲存的就是我們輸入進去的引數,它儲存在了一個字串裡。

總結

因為有了這兩個引數,所以我們平時用的很多命令列的工具都是通過這兩個引數的傳值來知道你的意圖。

如果不需要進行命令列引數的獲取,當然也可以不打int argc, char **argv這一句。

參考資料: