zoukankan      html  css  js  c++  java
  • 关于main函数

          main函数在一般的程序中是必须的但是也有例外:比如windows中编写的动态链接库(dll)模块。这是其他windows程序可以是用的代码,不属于独立的程序,所以可以不要main。还有专业环境中的程序,如机器人的控制芯片,也可以没有main函数。

          那么main函数的参数又是个什么问题呢?不是说不准别人调用main函数吗。原来这个参数只能从本程序外的传参来。

        mian函数的带参形式为

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

       从函数参数的形式上看,包含一个整型和一个指针数组。当一个C的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件(对windows操作系统而言),这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由系统在启动运行时传递参数了。在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为:命令 参数1 参数2.... 参数n ¿

          此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main函数的参数。
    命令行与main函数的参数存在如下的关系:
          设命令行为:program str1 str2 str3 str4 str5
          其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6]。其中argv[0]接受的是文件名,而后面的argv[]接受的是参数。
          那么命令行怎么运行一个具体的程序的呢?
      1、Win + R打开运行;2、输入cmd打开命令行;3、进入到要执行的exe文件所在目录,如要要执行E:\程序设计\test.exe文件,则输入E:回车(注意:如果要更改其他盘目录必须首先进入要进入盘的根目录,例如进入E盘则输入E:不用输入cd E:)进入E盘根目录,再输入cd E:\程序设计 则进入了当前目录,最后就可以输入参数了。
      这里的参数又是怎么用的呢?我们可以再程序中调用这个参数,比如说设置一个密码:password。
    当输入命令为 program password 参数 参数时,argv[1]保存的就是password。我们可以在程序中增加这样一个语言:
    if(strcmp(argv[1]=="password"){}

      这样只有命令行输入的是password时,程序才会执行。 

      在 C89 标准中,main()是可以接受的。Brian W. Kernighan 和 Dennis M. Ritchie 的经典巨著 The C programming Language 用的就是 main()。不过在最新的 C99 标准中,只有以下两种定义方式是正确的:

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

      main 函数的返回值类型必须是 int ,这样返回值才能传递给程序的激活者(如操作系统)。
      如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0; ,表示程序正常退出。不过,我们最好在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。 
      也就是说在最新的C语言标准中强制要求main函数的返回值类型为int,main函数的返回值是传递给操作系统,让操作系统判断程序的执行情况(是正常结束还是出现异常)

     

     
  • 相关阅读:
    CVS使用经验谈(zz from chinaunix.net)
    登黄山
    登黄山之二
    Dennis Ritchie 去世
    观迎客松
    从程序员角度看ELF
    再次回到这里
    异步时钟下跨时钟域信号处理
    Fedora14下的Novas和Synopsys
    Oralce导入\导出
  • 原文地址:https://www.cnblogs.com/Xdwd/p/2958361.html
Copyright © 2011-2022 走看看