學到過函數的同學們會知道函數是可以有參數和返回值的。其實我們用的主函數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>閱讀更多 明江帶你學習編程 的文章