0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

QQ3208919269 揭秘嵌入式C语言main函数的写法原因

如何学习嵌入式 来源:QQ3208919269 2020-03-08 14:11 次阅读

但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来揭秘嵌入式C语言main函数的写法原因。

那么main函数一共有多少个版本呢?

1、main()

直接的mian()并没有返回值,没有入参。这种写法实际来说,部分编译器会显示警告,并且会返回默认值为int。不过在C89标准中其实是可以的,由于没有声明返回类型,所以才会返回默认值int。

2、void main()

初学者经常会使用的形式,但是并不知道来源在哪,在C89/C99/C11等文档中都没有提到这种形式的痕迹。这种写法的返回值是void,没有参数。值得注意的是,一旦声明是void,在程序退出后,想要获取其退出状态也就不可以了。所以还是不建议返回值为void的。

3、int main(void)

比较常见的写法,这种写法的形参为void,表明它在调用的时候不能传入任何参数,那么它也就不能获取命令行参数了。

4、int main ()

和上面第3种看起来好像没啥区别,但是还是有些许不同。就下面例子来说:

#include

void test();

int main()

{

test(4);

return 0;

}

void test(int a)

{

printf("%d",a);

}

程序仍然可以正常运行,test函数虽然声明为无入参,但调用时却是可以传入任何参数或不传参数的。

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

int argc入参为命令行参数个数,char *argv[]入参为命令行参数数组。这种写法也比较常见的,主要用在需要从命令行获取参数的功能。

6、int main(int argc,char *argv[],char *envp[])

包含三个参数的一种写法,上面第5种的升级版,int argc是命令行参数个数,char *argv[]是命令参数数组,char *envp[]是环境变量数组。虽然只比第六种多了一个参数,但全局变量environ可以代替envp的作用,获取或者设置环境变量可以使用getenv或putenv,因此也没有必要使用该形式。这种写法多源于编译器的扩展。

上面写了这么多种写法,那么到底写哪种才算是对的?

查阅标准文档,里面明确固定了两种写法:

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

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

所以说,其他的写法并不符合标准,有些算是历史遗留有些算是编译器的扩展,还有些不知道从哪里生出来的。

所以说了这么多,为了代码的通用可移植性,建议采用标准提供的形式,还是推荐使用标准文档中规定的这两种写法。如果一个函数确定无需传入任何参数,那么用void限定是一个不错的选择。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4983

    文章

    18295

    浏览量

    288575
  • C语言
    +关注

    关注

    180

    文章

    7534

    浏览量

    128821
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66810
收藏 人收藏

    评论

    相关推荐

    如何成为一名嵌入式C语言高手?

    嵌入式C语言领域获得突出的技能和能力。 一、打下坚实的基础要成为一名嵌入式C语言高手,首先需要打
    发表于 04-07 16:03

    如何成为一名嵌入式C语言高手?

    嵌入式C语言领域获得突出的技能和能力。 一、打下坚实的基础要成为一名嵌入式C语言高手,首先需要打
    发表于 03-25 14:12

    嵌入式学习步骤

    开发。 嵌入式学习步骤总结如下: (1).确定目标平台:选择适合您要开发的嵌入式系统的硬件平台。这取决于您要控制的设备以及您需要执行的任务。 (2).选择编程语言嵌入式系统通常使用
    发表于 02-02 15:24

    嵌入式自学好书推荐

    嵌入式自学好书推荐 在数字时代的浪潮中,嵌入式系统一直是数字电子产品中的重要组成部分。无论是家用电器、工业控制、汽车电子、医疗保健、军事应用还是物联网,嵌入式系统都无处不在,展现了广阔的前景。随着
    发表于 01-11 15:13

    嵌入式open函数的使用

    嵌入式系统是指嵌入到其他设备或系统中,用于控制和管理硬件资源的计算机系统。在嵌入式系统中,通常需要与外部设备进行数据交互,例如读取传感器数据、控制执行器等。open函数是C
    的头像 发表于 01-04 15:51 243次阅读

    嵌入式C语言的结构特点

    过程中,不论是基于寄存器开发还是基于库开发,深入理解和掌握嵌入式C语言函数、指针、结构体是学习STM32的关键。嵌入式C语言的结构特点如下
    的头像 发表于 11-24 16:16 321次阅读
    <b class='flag-5'>嵌入式</b>C<b class='flag-5'>语言</b>的结构特点

    c语言源程序main函数的位置

    C语言源程序中的main函数是程序的入口点,它被认为是C语言程序的起点。在执行程序时,操作系统将首先定位到main
    的头像 发表于 11-24 10:23 926次阅读

    嵌入式c语言学习实战 #C语言 #嵌入式开发 #linux学习 #贪吃蛇

    嵌入式C语言学习
    _08810537
    发布于 :2023年11月07日 09:48:59

    为什么Python没有main函数

    今天的文章中,我们来讨论一下为什么有的编程语言main函数,而Python为什么没有main函数
    发表于 08-17 11:47 172次阅读

    C语言main函数的正确写法

    大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言main函数的正确写法,希
    发表于 07-11 11:51 440次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>main</b><b class='flag-5'>函数</b>的正确<b class='flag-5'>写法</b>

    C语言编程中main函数退出后程序去哪儿了?

    PIC 单片机语言程序进行跟踪,发现main() 函数最后一条语句为 reset,也就是单片机直接复位,这是 MAPLAB编译器根据 PIC 单片机特点增加的复位语句。
    发表于 05-31 15:28 230次阅读
    C<b class='flag-5'>语言</b>编程中<b class='flag-5'>main</b><b class='flag-5'>函数</b>退出后程序去哪儿了?

    嵌入式C语言-为什么要引入ASCII码 #编程入门 #c语言 #编程语言#硬声创作季

    嵌入式C语言
    也许吧
    发布于 :2023年05月24日 12:40:49

    嵌入式用什么语言编程?

    具有高级语言的易编程性,具代表性的应用就是UNIX操作系统,从20世纪80年代中期C语言涉足实时系统之后,就受到了普遍的欢迎,是目前使用广泛的嵌入式系统编程
    发表于 05-18 10:08