因為大學上課時候,經常是在主函數中做處理,直接用cout語句輸出到顯示設備,所以一直在用void main().
直到后面具體編程的時候,才發現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語句。
2、那么再來說說帶參數的main函數,這兩個參數是干嘛用的
如果不用命令行獲取參數的話,就不用這種格式了。
關於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.html