zoukankan      html  css  js  c++  java
  • 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 est how are you
    那么test工程的main函数参数argc=4;
    argv[0]将保存字符串"C:TC est"的首地址;
    argv[1]将保存字符串"how"的首地址;
    argv[2]将保存字符串"are"的首地址;
    argv[3]将保存字符串"you"的首地址;
    下面的例子打印所有的argv参数:
    main(int argc, char *argv[])
    {
    int i;
    printf(" Total %d arguments",argc);
    for(i=0;i<argc;i++)
    {
    printf(" Argument %d = %s ",i+1, argv);
    }
    }
    如果编译后的exe文件名称为test,在DOS下运行C:TC est how are you,结果输出:
    Total 4 arguments
    Argument 1 = C:TC est.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

  • 相关阅读:
    587 模块化开发 CommonJS规范:exports,module.exports,require细节,模块加载顺序,AMD和CMD规范
    img标签到底是行内元素还是块级元素
    File、Blob、dataURL 和 canvas 的应用与转换
    正则表达式
    什么是AVIF?如何在你的网站上使用AV1格式图像
    前端性能优化之图片懒加载
    padding-top的百分比值参考对象竟是父级元素的宽度
    自动增长Textareas的最干净技巧
    用纯css模拟下雪的效果
    了解CSS基本用法和选择器知识
  • 原文地址:https://www.cnblogs.com/findumars/p/6220233.html
Copyright © 2011-2022 走看看