历史上的今天
返回首页

历史上的今天

今天是:2025年03月05日(星期三)

正在发生

2018年03月05日 | C语言main函数的标准定义

2018-03-05 来源:eefocus

    学过C语言的人都知道,main函数是程序启动的入口函数,每一个C语言程序里有一个main函数,在程序里它是唯独一个不能被其他函数调用的特殊函数。在众多的单片机C语言编译器里对main函数的写法都没有明确的要求,写法非常自由,可以写成带形参的函数,也可以写成无形参的函数,还可以写成返回值为任意数据类型的函数。通用的写法都是:void  main () {…}。而根据C99标准的要求,main函数是一个有返回值的函数,而且返回值类型必须为int。下面这段英文描述是从C99标准的PDF文档上复制下来的:

    5.1.2.2.1 Program startup

    The calLED at program startup is named main.The implementation declares no

    prototype for this .It shall be defined with a return type of int and with no

    parameters:

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

    or with twoparameters (referred to here as argc and argv,though anynames may be

    used, as theyare LOCal to the in whICh theyare declared):

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

    or equivalent;9)or in some other implementation-defined manner.

    从C99标准的规定里可以看出,main函数的标准定义一般为这两种形式:

    第一种形式:

    int main (void)

    {

    ……

    return 0;

    }

    第二种形式:

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

    {

    ……

    return 0;

    }

    第一种定义main函数不带形参,写起来比较简便。编写单片机C语言程序是不需要通过操纵系统向main函数传递参数的,所以笔者推荐采用第一种标准定义。

    标准的意义在于通用,对C语言来讲,符合标准意味着代码的可移植好。如果main函数不符合C99标准也没关系,只要编译器支持,对您的程序没有任何影响。到目前为止,没有哪个C编译器完全遵循C99标准,这都是为了让编译器兼容以前的代码,这也是为什么C标准十几年才修改一次的原因。当然,这并不代表新标准形同虚设,从发展趋势来看,C编译器都会逐渐向新标准靠拢。

    既然有了标准我们就应该遵循。我们可以用权威标准来衡量一个代码的优劣,去批判“另类”代码,写出标准的C代码,提高代码的可移植性。


推荐阅读

史海拾趣

Automatic Connector公司的发展小趣事

在电子连接器行业,品质是决定企业生死存亡的关键。Automatic Connector公司深知这一点,因此在生产过程中严格执行品质管理标准。公司引进了先进的生产设备和质量检测仪器,确保每一件产品都符合高标准的质量要求。同时,公司还建立了完善的售后服务体系,及时解决客户在使用过程中遇到的问题。凭借卓越的品质和优质的服务,Automatic Connector赢得了客户的信赖和好评。

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

CoolerMaster公司的发展小趣事

1992年,台北的一间出租屋内,林仁政凭借对电脑硬件的深厚理解与直觉,创立了讯凯国际股份有限公司,即现今广为人知的Cooler Master。初期,公司以生产个人电脑用散热器起家,目标明确——提供业界最好的散热方案。在没有资金、没有支持的情况下,林仁政独自完成了品牌的创建、日常事务的处理以及工作进程的管理。他的坚持与努力,使得Cooler Master逐渐在市场中站稳脚跟,开启了其在散热领域的传奇之旅。

绿宝石(BERYL)公司的发展小趣事

绿宝石公司自创立之初,便致力于电子材料领域的研发。某年,公司研发团队成功开发了一种具有优异性能的绿宝石电子材料,这种材料在高频、高温等极端环境下仍能保持稳定性能,为电子行业带来了革命性的变革。随着这一技术的广泛应用,绿宝石公司在行业内逐渐树立了技术领先的形象,市场份额稳步上升。

Bkc Semiconductors Inc公司的发展小趣事

Bkc Semiconductors Inc最初是一家专注于半导体技术研发的小型创业公司。在公司成立的初期,团队通过不懈的努力,成功研发出了一款具有高性价比的功率半导体芯片,该芯片在能效和稳定性上均达到了行业领先水平。这一技术突破使得Bkc的产品迅速获得了市场的认可,公司开始逐渐在电子行业中崭露头角。

Allegro公司的发展小趣事

Bkc Semiconductors Inc最初是一家专注于半导体技术研发的小型创业公司。在公司成立的初期,团队通过不懈的努力,成功研发出了一款具有高性价比的功率半导体芯片,该芯片在能效和稳定性上均达到了行业领先水平。这一技术突破使得Bkc的产品迅速获得了市场的认可,公司开始逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

外壳带电问题

一次在维修机器的时候,我同时碰到了机顶盒的外壳和维修台的接地端,给电了一下.测量测外壳时居然发现外壳带电,电压有50V,后来查了下资料,说外壳带电属正常现象,具体跟电路板与外壳之间的电抗Z1和外壳与地之间的电抗Z2有关,可简单理解为Z1与Z2串联,外 ...…

查看全部问答>

AVR中CPI指令是如何影响进位标志位C的?

程序如下BRLO(line 36)指令是根据进位标志C跳转的,它前面的CPI指令是如何影响到进位标志位C和零标志位Z来影响程序 流程的?r1初始值为0 avr034C:        ldi        YL, 0x5F      &nb ...…

查看全部问答>

驱动中如何区分U盘和移动硬盘

做了一个usb过滤驱动挂在磁盘驱动器类下,想问一下 应该怎样区分是移动硬盘还是U盘?…

查看全部问答>

请问 是否有 WinCE环境下的 MPEG4编码开源代码?

哪位大侠能提供一下, 另外xvid开源码需要安装direct9.0 SDK 不知是否能用于WINce环境开发!谢谢…

查看全部问答>

优化高亮度LED的使用寿命 ESD保护考虑事项

随着亮度和能效的提升,延长使用寿命已经为促进基于高亮度发光二极管(HB-LED)的固态照明设计快速发展的主要因素之一。然而,并非所有HB-LED在这些方面都旗鼓相当,制造商应用静电放电(ESD)保护的方式可能是影响HB-LED现场使用寿命的一个至关键 ...…

查看全部问答>

香水城,再请教你2个问题,cosmicc的环境st72324

问题1:I2Cms 是定义的全局变量,I2Cms 在1毫秒定时器里累加,现在的问题    I2Cms = 0;    while(I2Cms<=10)    {    }这个while根 ...…

查看全部问答>

Altera的芯片管脚被焊断了,导致芯片的AS模式不能正常下载,怎么办?

Altera的EP3C40的芯片负责下载模式选择的管脚被焊断了,导致芯片的AS模式不能正常下载,怎么办???? 因为本块板还要使用Niosii实现以太网口的收发,怎么办?????急求~~~~~…

查看全部问答>

【设计工具】高速环境下的状态机设计和优化技巧

通过减少寄存器间的逻辑延时来提高工作频率,或通过流水线设计来优化数据处理时的数据通路来满足高速环境下FPGA或CPLD中的状态机设计要求。本文给出了采用这些技术的高速环境状态机设计的规范及分析方法和优化方法,并给出了相应的示例。   为了 ...…

查看全部问答>

大家有没有注意到论坛资源中心低调上线

红色框框里面就是资源中心的连接! 在这里号召大家上传资料哦! 资料被分类了,查找起来应该比在论坛找方便多了,大家在填写标签的时候尽量详细些,这样下载查找也方便。…

查看全部问答>