06.18 學了那麼久的C語言可能連主函數都不會用

學了那麼久的C語言可能連主函數都不會用

學到過函數的同學們會知道函數是可以有參數和返回值的。其實我們用的主函數main()函數也是有參數和返回值的, 很多人甚至市面上的一些書籍,都使用了void main( ) ,其實這是錯誤的。C/C++ 中從來沒有定義過void main( )。C++之父 Bjarne Stroustrup 在他的主頁上的 FAQ 中明確地寫著 The definition void main( ) {}is not and never has been C++, nor has it even been C.( void main( )從來就不存在於C++ 或者 C )。下面我分別說一下 C 和 C++ 標準中對 main 函數的定義。

C++98 中定義瞭如下兩種 main 函數的定義方式:

int main( )

int main( int argc, char *argv[] )

1. main() 參數

在Turbo C2.0啟動過程中,傳遞main()函數三個參數:argc,argv和env。

* argc: 整數,為傳給main()的命令行參數個數。

* argv: 字符串數組。

在DOS 3.X 版本中,argv[0] 為程序運行的全路徑名;

對DOS 3.0 以下的版本,argv[0]為空串("") 。

argv[1] 為在DOS 命令行中執行程序名後的第一個字符串;

argv[2] 為執行程序名後的第二個字符串;

...

變量名稱argc和argv是常規的名稱,當然也可以換成其他名稱。那麼,實際參數是如何傳遞給main函數的argc和argv的呢?我們知道,C程序在編譯和鏈接後,都生成一個exe文件,執行該exe文件時,可以直接執行;也可以在命令行下帶參數執行,命令行執行的形式為:可執行文件名稱 參數1 參數2 ... ... 參數n。可執行文件名稱和參數、參數之間均使用空格隔開。

如果按照這種方法執行,命令行字符串將作為實際參數傳遞給main函數。具體為:

(1) 可執行文件名稱和所有參數的個數之和傳遞給argc;

(2) 可執行文件名稱(包括路徑名稱)作為一個字符串,首地址被賦給argv[0],參數1也作為一個字符串,首地址被賦給argv[1],... ...依次類推。

例如,現在運行命令行(test是編譯後的exe文件名稱):

C:\\TC\\test how are you

那麼test工程的main函數參數argc=4;

argv[0]將保存字符串"C:\\TC\\test"的首地址;

argv[1]將保存字符串"how"的首地址;

argv[2]將保存字符串"are"的首地址;

argv[3]將保存字符串"you"的首地址;

下面的例子打印所有的argv參數:

main(int argc, char *argv[])

{

int i;

printf("\\nTotal %d arguments",argc);

for(i=0;i<argc>

{

printf("\\nArgument %d = %s ",i+1, argv);

}

}

如果編譯後的exe文件名稱為test,在DOS下運行C:\\TC\\test how are you,結果輸出:

Total 4 arguments

Argument 1 = C:\\TC\\test.exe

Argument 2 = how

Argument 3 = are

Argument 4 = you

如果覺得我文章還可以的,可以關注,收藏,轉發,評論。

如果有想學習或者再學習C語言的同學可以關注私聊發送“C語言”我會給大家提供 交流環境,學習資料和指導。

那麼文章到這裡就結束了。大家端午節快樂。

/<argc>


分享到:


相關文章: