為什么需要main函數,及其參數的用法


首先,需要明確main函數是什么?

答:main函數是C語言約定的入口函數

致新同學:淺談為什么需要main函數,及其參數的用法

C99標准里面是這樣描述的:

Program startup

The function called at program startup is named main.The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:

int main(void) { /*...*/ }

or with two parameters (referred to here as argc and argv,though any names may be used, as they are local to the function in which they are declared):

int main(int argc, char *argv[]) { /*...*/ }

同時,規定了main函數的兩種常見形式:

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

對於第一種形式大家經常用到,而第二種情況中的參數用法,可能關注的不太多,下面我們會進一步提及。

關於將main函數約定為入口函數(即:執行入口)的提法,MSDN上也有提到:

A special function named main is the starting point of execution for all C and C++ programs. If you are writing code that adheres to the Unicode programming model, you can use wmain, which is the wide-character version of main.

地址:https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

從上面的討論,可以知道main函數是約定入口函數,那么標題“為什么需要main函數”,可以引申為“為什么需要入口函數”。

這個問題其實不好回答,想詳盡的了解,可以參考《程序員的自我修養》。

知乎上有一篇文章《C語言為什么要有 main 函數?具體作用是什么?》,大家可以參考。

地址:

http://www.zhihu.com/question/28360770

我們這里只是淺顯的回答,其中知乎上有一個簡單的回答,雖然不是太深入,但是相對比較直觀。

作者:Ivony,,,,

地址:http://www.zhihu.com/question/38055198/answer/74753788

這是個好問題,但是這個問題恐怕比你想的水深得多。

C++程序以main函數為入口這個說法嚴格來說並不正確。

我這里不展開,只簡單的談談。

要解決這個問題,我們先要看所謂的入口是什么意思,到底有什么用處。

一個程序需要怎么運行呢?在Windows上就是編譯成一個exe文件,然后雙擊,Windows就會幫你運行這個文件。Windows怎么知道怎么去運行這個文件?這么一大堆代碼應該從哪里開始執行?就需要這個文件提供一個所謂的入口,操作系統(或者說啟動器)從這個入口開始執行程序。

在這個例子里面,Windows就是這個程序的宿主/啟動器,這個宿主/啟動器要求程序需要一個入口也就是main函數。

在這里,大家可以回想現實生活中的現象,比如景點為何要設置“景區入口”?

請思考

只有規定了“景區入口”,游客才知道從哪進入;

只有規定了“景區入口”,景區才方便統一收費,統一安檢, 統一各種管理等等

說到這里,其實我想說一下討論該問題的初衷:

為了說明一個知識點,即我們可以在main函數,利用入口參數做一些工作,以達到控制程序行為的目的。

在int main(int argc, char *argv[]) { /*...*/ }函數 體中,argc為整型,標識參數個數;argv是指針數組,為參數列表,通常是利用argv中的參數做文章,我們看一個具體的小例子:

#include "stdio.h"

#include <string.h>

bool g_WriteLog = false;

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

{

for(int i=0; i< argc; i++)

{

if( strcmp(argv[i], "-writelog") == 0 )

{

g_WriteLog = true;

}

}

if( g_WriteLog ) //開關默認關閉

{

for(int j=0; j < 10; j++ )

{

printf("%d\t" , j);

}

}

printf("\n");

return 0;

}

編譯:g++ control.c -o con

運行:./con –writelog

0 1 2 3 4 5 6 7 8 9

上述代碼中,利用入口參數“-writelog”控制是否打印數字。

舉個實際例子,可以通過參數,控制一組服務器的人數上限,比如你可以限制A服務器最多1000人,而限制B服務器最多2000人。

諸如此類的應用十分廣泛,有時候,也會在快捷方式中包含啟動參數,如下圖:

致新同學:淺談為什么需要main函數,及其參數的用法

點擊快捷方式執行,也就相當於給main函數傳入了參數。

再多說一句,main函數還可以有第三個參數:

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

感興趣的人,可以自己搜索一下相關資料。

總之,希望上述的討論,能引起大家一點思考,即便簡單的main函數也是很有料的;同時,希望大家記住main函數參數的用法。

最后,問題的理解,需要在實踐中加深;后續也請將你的理解分享給大家。


免責聲明!

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



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