c語言main函數返回值、參數詳解(返回值是必須的,0表示正常退出)


C語言Main函數返回值

        main函數的返回值,用於說明程序的退出狀態。如果返回0,則代表程序正常退出;返回其它數字的含義則由系統決定。通常,返回非零代表程序異常退出。

        很多人甚至市面上的一些書籍,都使用了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 函數的定義。 

        在 C89 中,main( ) 是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的經典巨著 The C
programming Language 2e(《C 程序設計語言第二版》)用的就是 main( )。不過在最新的 C99 標准中,只有以下兩種定義方式是正確的: 
           int main( void ) 
           int main( int argc, char *argv[] ) 
如果不需要從命令行中獲取參數,請用int main(void) ;否則請用int main( int argc, char *argv[] )。 main 函數的返回值類型必須是 int ,這樣返回值才能傳遞給程序的激活者(如操作系統)。

        如果 main 函數的最后沒有寫 return 語句的話,C99 規定編譯器要自動在生成的目標文件中(如 exe 文件)加入return 0;,表示程序正常退出。不過,建議你最好在main函數的最后加上return語句,雖然沒有這個必要,但這是一個好的習慣。注意,vc6不會在目標文件中加入return 0; ,大概是因為 vc6 是 98年的產品,所以才不支持這個特性。現在明白我為什么建議你最好加上 return 語句了吧!不過,gcc3.2(Linux 下的 C編譯器)會在生成的目標文件中加入 return 0; 。 

        C++98 中定義了如下兩種 main 函數的定義方式:
                  int main( ) 
                  int main( int argc, char *argv[] ) 

        int main( ) 等同於 C99 中的 int main( void ) ;int main( int argc, char*argv[] ) 的用法也和C99 中定義的一樣。同樣,main函數的返回值類型也必須是int。如果main函數的末尾沒寫return語句,C++98 規定編譯器要自動在生成的目標文件中加入 return0; 。同樣,vc6 也不支持這個特性,但是 g++3.2(Linux 下的 C++編譯器)支持。 

關於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

 

http://www.qtcn.org/bbs/apps.php?q=diary&a=detail&did=2287&uid=176322


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM