美文网首页
C语言main函数的参数

C语言main函数的参数

作者: Mr_Bluyee | 来源:发表于2018-07-27 12:40 被阅读18次
    main的参数

    C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv,argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。格式:

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

    由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢?

    实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。在DOS下一条完整的运行命令包含2部分:命令与相应的参数。格式为:

    命令 参数1 参数2 ... 
    

    这种格式也叫命令行,命令行中的命令就是可执行文件的文件名,它后面的参数要用空格分隔,是对命令的进一步补充,即是传递给main()函数的参数。

    其中整型argc表示命令行中字符串的个数,argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。指针数组argv[]指向命令行中的各个字符串。这两个参数可以用任何合法的标识符命名,但是习惯采用argc和argv。

    #include <stdio.h>
    
    int main(int argc,char *argv[]){
        int i=0;
        printf("argc = %d\n",argc);
        for(i = 0;i<argc;i++){
            printf("argv[%d] = %s\n",i,argv[i]);
        }
        return 0;
    }
    

    编译后在命令行中执行:

    template_arg.exe -a -b -c -d hello.txt
    

    程序运行输出:

    argc = 6
    argv[0] = template_arg.exe
    argv[1] = -a
    argv[2] = -b
    argv[3] = -c
    argv[4] = -d
    argv[5] = hello.txt
    

    可见,argc为6,argv[0]为自身运行目录路径和程序名。
    从argv[1]开始指向命令行中我们添加的参数。
    这种形式带来的问题就是选项开关和其他参数(如文件名)之间分类不清(都是字符串),实现命令行参数位置的灵活和不出错,意味着在代码中解析命令行参数时要充分考虑可能出现的情况。

    有些C程序员采用了一种约定,带'--'的参数,表示从这个参数开始,后面的参数都不是选项开关,即便它是以连字符开头。一种更好的解决办法是把包袱扔给系统而不是用户,使用参数处理器把参数分成选项开关和非选项开关两种,目前这种简单的argv机制由于使用的太广,因而不可能对它做任何修改。

    main的返回值

    在 C99 标准中,main函数只有以下两种定义方式是正确的:

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

    void main()的用法是错误的。
    main 函数的返回值类型必须是 int,返回值用于说明程序的退出状态。
    如果返回0,则代表程序正常退出;返回其它数字的含义则由系统决定。
    通常,返回非零代表程序异常退出。
    如果 main 函数的最后没有写 return 语句的话,C99 规定编译器要自动在生成的目标文件中(如 exe 文件)加入return 0。
    在 C89 中,main( ) 是可以接受的,也就是说 main()等同于int main(),不明确标明返回值的,默认返回值为int。

    相关文章

      网友评论

          本文标题:C语言main函数的参数

          本文链接:https://www.haomeiwen.com/subject/rkgwmftx.html