C语言常见问题(二)

您所在的位置:网站首页 c语言中main(void)是什么意思 C语言常见问题(二)

C语言常见问题(二)

2024-07-15 20:13| 来源: 网络整理| 查看: 265

目录

一、int main与void main

二、关于return 0

三、带参数的main函数

一、int main与void main

1.main函数标准写法

        C99标准规定C语言main函数返回类型一定为int,并且只有两种写法:

        1)标准写法一(无参数)

        int main(void) { /* ... */ }

        在C++中,int main()和int main(void)没有任何区别。但是在C语言中,int main()是可以传入参数的,而int main(void)则不能传入参数。

        2)标准写法二(带参数)

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

        int main(int argc,char **argv) { /* ... */ } //与标准写法二等价

        C语言允许main函数带参数,其中argc表示参数个数,argv[0]为程序的路径,argv[1]指向命令行中执行程序名后的第一个字符串,argv[2]指向第二个字符串...以此类推。

2.关于void main

        但有时我们会见到main函数的其他写法,比如main()和void main()。

        首先谈谈main(),对于main()大多数编译器是按int main()类型处理,即使你没写return语句,编译器也会在程序末尾默认加上return 0;。但是考虑到程序的可移植性,最好不要采用这种写法。

        然后是void main(),这种写法在老版本的C语言代码中比较常见,不过现在的一些教材中仍存在这种写法,事实上这种写法是错误的、不规范的,因为C标准中从来没有规定void main()这种写法。

        有同学会说:“我尝试了void main(),是可以使用的。”的确,有的编译器比如VC6.0(C89)是支持void main这种写法的,但并非所有编译器都是如此,很多编译器是不支持这种写法的,比如codeblocks(如下图)。所以为了程序的可移植性,最好不要采用void main这种写法。

        补充说明一下,void main()这种写法在单片机中比较常见,因为不需要返回值给操作系统。

 

二、关于return 0

1.下面是一个非常简单的C程序

#include int main(void){ printf("Hello world!"); return 0; }

 

        可以看到,在程序结尾处有一条语句“return 0;”,作用是返回整数0给操作系统,表示程序正常运行结束了。由于C99规定C语言的main函数一定是int类型,也就是说main函数会返回一个整数。如果返回0,则代表程序正常退出;如果返回值非0,则表示程序出现了异常。这个返回值在操作系统的命令行窗口是可见的。(注意一下main函数返回值是返回给操作系统的,只要你设置返回值了,并不会影响你当前所编写程序的执行。)

        有时即使我们忘了写return 0,程序也能正常运行,这是因为C99 规定编译器要自动在生成的目标文件中加入return 0。但是要注意,vc6.0编译器并不会自动为你加上return 0(可能因为vc6.0是98年的产品,所以不支持这个特性),这时编译器会报错。所以,我们平时在写代码的过程中,一定要养成给main函数设置返回值的习惯。

2.我们可以尝试一下让main函数返回其他值

#include int main(void){ printf("Hello world!"); return 1; }

 

3.我们可以利用main函数的返回值来控制多个程序的执行

举个例子:

1)我们新建一个程序p1

2)再新建一个程序p2

 

3)编译生成p1、p2的exe文件之后,打开命令行窗口(键盘[Win]+[R]-->输入cmd)

4)输入p1.exe的路径,尝试运行一下p1程序,可以看到运行结果

 

5)为了操作方便,我们先跳转到p1.exe所在目录下。然后输入“p1 && p2”

(p1 && p2的含义是: 执行程序p1。如果程序p1正常退出,则继续执行p2;否则不执行p2)

 

6)现在我们修改p1程序,让main函数返回1(记得编译一下)

 

7)在cmd窗口执行“p1 && p2”,可以看到只有p1运行了。

三、带参数的main函数

1.Linux下的许多命令都是带参数的,C语言也允许main函数带有参数。我们先回顾一下带参数的main函数的标准写法:

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

        其中argc表示参数个数,argv[0]为程序的路径,argv[1]指向命令行中执行程序名后的第一个字符串,argv[2]指向第二个字符串...以此类推。

2.下面是一个main函数带参数的程序p1

#include #include int main(int argc,char *argv[]){ int i=0; printf("文件路径: %s\nmain参数个数: %d\n参数列表:",argv[0],argc); for(i=1;i1){ if(strcmp(argv[1],"1")==0) printf("fun1\n"); else if(strcmp(argv[1],"2")==0) printf("fun2\n"); else if(strcmp(argv[1],"3")==0) printf("fun3\n"); else printf("error!"); } return 0; }

进入命令行窗口,跳转到p1.exe所在目录后,依次输入“p1”“p1 1”,“p1 2”,“p1 3”,如图。

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3