嵌入式技术
大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言main函数的正确写法,希望能对你有所帮助
摘要:最近有粉丝说他是在校大学生,刚学C语言,看到main函数写法很多种,不知道哪种写法是对的,很是苦恼,想知道C语言的main函数到底标准写法是哪一种。说实话,一开始被问这个问题,一时半会儿也是回答不上来,平时做项目,也没仔细关注过这个。这不特意去学习了一下,也整理了一下,供参考。检测一下,你是否知道C语言main函数的这几种写法有何区别呢?
想必学过C语言的都知道,C程序的入口就是main函数,整个程序从main函数开始执行,在main函数中结束。实际上C程序可以没有main函数,入口函数可自行指定。
在嵌入式软件开发中,其实程序不是从main函数开始执行的,在main函数执行之前,会有硬件初始化,内存分配,汇编等,后面才执行到main函数。看一下嵌入式启动程序的汇编,你就会发现main函数是在汇编代码中绑定了,执行完汇编后,会跳转到main函数,所以在绑定main函数的地方,改成其他函数,那就会执行完汇编后,从该函数开始执行。
无返回值,无参数。
在C89标准中,这种写法是可以接受的,但用现在的编译器编译时,会报警告,并且会将其返回值默认为int。如果函数没有显式声明返回类型,编译器会将返回值默认为int。
#include < stdio.h >
main()
{
printf("hello,world!\\r\\n");
}
返回值为void,无参数
main函数执行完后,返回0,则表示程序正常结束;若返回非0数值,则表示异常退出,通常由系统决定。一旦声明为void,在程序退出后,想要获取其退出状态也就不可以了。因此不建议其返回值为void。
#include < stdio.h >
void main()
{
printf("hello,world!\\r\\n");
}
返回值为int,参数为void
这是一种比较常见的写法,有返回值,返回值显式声明为int类型,返回0,则表示程序正常结束;若返回非0数值,则表示异常退出。参数为void,表示调用的时候,不能传入参数,也就不能获取命令行参数了。
#include < stdio.h >
int main(void)
{
printf("hello,world!\\r\\n");
return 0;
}
返回值为int,没有参数
这种方式和第三种方式没啥差别
#include < stdio.h >
int main()
{
printf("hello,world!\\r\\n");
return 0;
}
网上很多帖子用这个例子来说明,int main() 和int main(void)的区别,个人觉得不太恰当(可能是我没理解透,如有错误请指正goutou),此处的test的在函数定义是有形参的,只是声明时没有写形参(印象中函数的声明,可以不加形参的名字,加形参类型即可,但试了一下下面的例子,test声明时,没有加形参也没问题)而已,故而能传参。但int main()函数在定义时就没有形参,怎么能传参呢?此处有点纳闷
返回值为int,有两个参数
这也是最常见的写法,第一个参数为命令行参数个数,第二个为命令行参数内容。通常用于实现需要从命令行获取参数的功能。
#include < stdio.h >
int main(int argc, char *argv[])
{
int i;
for (i=0; i < argc; i++)
{
printf("argument %d is %s.\\n", i, argv[i]);
}
return 0;
}
这种写法和int main(int argc, char **argv)是等价的
这是在Windows下执行的,gcc编译后,在Windows下生成 .exe
可以看到,没有通过命令行传入参数时,也会有一个参数打印出来,就是可执行程序本身,这是默认的;后面传入参数后,可看到打印出来的参数
返回值为int,有三个参数
和第五种差不多,只是多了一个参数,用于获取环境变量,这种形式多源于编译器扩展。但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。
#include< stdio.h >
int main(int argc, char *argv[], char *envp[])
{
int i;
for (i=0; i < argc; i++)
{
printf("argument %d argv is %s, envp:%s.\\n", i, argv[i], envp[i]);
}
return 0;
}
执行结果
C语言main函数有那么多种写法,那么平时到底该用哪中写法呢。我们来看看C标准文档,提供了两种main函数写法
C标准只提供了两种main的形式,建议平时写的时候使用标准形式。
全部0条评论
快来发表一下你的评论吧 !