• 为什么需要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 " , j);

    }

    }

    printf(" ");

    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函数参数的用法。

    最后,问题的理解,需要在实践中加深;后续也请将你的理解分享给大家。

  • 相关阅读:
    DataNucleus Access Platform 3.2 M2 发布
    dnsjava 2.1.4 发布,Java 的 DNS 解析包
    deltasql 1.5.5 发布,数据库模型版本控制
    Mezzanine 1.3 和 Cartridge 0.7 发布!
    Spring Framework 3.2 GA版发布,Spring MVC焕然一新
    Filemonitor 2.2.0 发布,文件监控工具
    Rudiments 0.40 发布,C++ 常用工具包
    脚本编程语言 Felix
    JRuby 1.7.2 发布
    OfficeFloor 2.7.0 发布,IoC 框架
  • 原文地址:https://www.cnblogs.com/zhangfeionline/p/5901539.html
Copyright © 2020-2023  润新知