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

看实验室的main函数,以及之前看到的一些代码里,主函数总是int main(int argc,char* argv[]),之前写一直都是int main(),不知道这两个参数是什么意思,上百度查询,特记录如下:

主函数main中变量(int argc,char *argv[ ])的含义

有些编译器允许将main()的返回类型声明为void,这已不再是合法的C++

main(int argc, char *argv[ ], char **env)才是UNIXLinux中的标准写法。

argc: 整数,用来统计你运行程序时送给main函数命令行参数的个数

* argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数

argv[0] 指向程序运行的全路径名

argv[1] 指向在DOS命令行中执行程序名后的第一个字符串

argv[2] 指向执行程序名后的第二个字符串

...

argv[argc]为NULL。

而我本人理解这两个函数也是通过其给出的两个测试实例

#include <stdio.h>//#包含<stdio.h>
 
int main(int argc,char* argv[])    //整数类型主函数(整数类型统计参数个数,字符类型指针数组指向字符串参数)
{
    printf("%d\n",argc);           //格式化输出
    while(argc)                    //当(统计参数个数)
        printf("%s\n",argv[--argc]);   //格式化输出
    return 0;                      //返回0;正常退出
}

以及

假设将其编译为 test.exe,在命令行下,> test.exe test hello,得到的输出结果为

3

hello

test

test.exe

其中argv[0]中存放的是全路径名(虽然不知道什么意思),argv[1]中存放字符串test,argv[2]中存放字符串hello,

第二个例子:

#include<stdio.h>
int main(int argc,char *argv[])
{
    if(argc==1||argc>2)
        printf("请输入想要编辑的文件名如:fillname");
    if(argc==2)
        printf("编辑%s\n",argv[1]);
    return 0;
}

运行:〉edit

结果:请输入想要编辑的文件名如:fillname

运行:〉edit f1.txt

结果:编辑 f1.txt

执行edit时,argc为1,argv[0]指向edit

而执行edit f1.txt时,argc的值为2,argv[0]指向edit,argv[1]指向f1.txt

但是其中提到了一句话:argc, argv,env是在main( )函数之前被赋值的,编译器生成的可执行文件,main( )不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。

又去网上搜索,得到了答案,现粘贴如下:

不是。C程序只是源代码,具体是否需要 main 取决于您要编译成什么样的可执行文件。在Windows平台上,这包括:是直接可执行文件(exe)还是动态连接库(dll,ocx...),是控制台程序(像DOS窗口的那种)还是GUI程序(像Internet Explorer那种),是 unicdoe (wmain) 还是 MBCS (main),是否使用了标准C语言运行时(C runtime)

编译程序时,入口点是可以通过编译器指定的,如果你不指定,它的默认值是调用 C runtime 的入口点,而不是 main,C runtime 的入口函数执行完它自己的工作后会调用你的 main,所以是 C runtime 要求你的程序必须写 main。你也可以通过参数告诉编译器直接拿你的任何一个函数作为入口点,这样程序启动后第一个被执行的就不再是 main 了,因为连 C runtime 都没机会执行了。不过这样一来很多 C 标准函数也不能用了,因为它们需要 C runtime 的入口函数为它们做一些初始化工作。main 函数的两个参数也没作用了,它们其实是 C runtime 的入口函数搞出来的。

摘自:https://zhidao.baidu.com/question/318270859.html 之下的meng_8084的回答

发布了23 篇原创文章 · 获赞 3 · 访问量 4037

猜你喜欢

转载自blog.csdn.net/weixin_43098069/article/details/84844144