由於大學上課時候,常常是在主函數中作處理,直接用cout語句輸出到顯示設備,因此一直在用void main().html
直到後面具體編程的時候,才發現void main()這種用法是按 C89(C語言的早期標準)規定的,main() 是能夠接受void返回值的。Brian W. Kernighan 和 Dennis M. Ritchie 的經典鉅著 The C programming Language(《C 程序設計語言》)用的就是void main( )。不過在最新的 C99 標準中,只有如下兩種定義方式是正確的:
int main( void )
int main( int argc, char *argv[] )
固然,咱們也能夠作一點小小的改動。例如:char *argv[] 能夠寫成 char **argv;argv 和 argc 能夠改爲別的變量名(如 intval 和 charval),不過必定要符合變量的命名規則。編程
C99和C++98規定編譯器要自動在生成的目標文件中加入」return 0;」, 表示程序正常退出.寫程序好的習慣是本身在main函數的最後加上return語句,由於並非全部的編譯器都支持這一特性. 因此若是想讓本身的程序寫出來移植性好,最好加上return語句。函數
二、那麼再來講說帶參數的main函數,這兩個參數是幹嗎用的spa
若是不用命令行獲取參數的話,就不用這種格式了。命令行
關於main(int argc, char *argv[])
argc和argv是main函數的形式參數。這兩個形式參數的類型是系統規定的。若是main函數要帶參數,就是這兩個類型的參數;不然main函數就沒有參數。
變量名稱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;i++)
{
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設計
部分轉自https://www.cnblogs.com/findumars/p/6220233.htmlhtm