历史上的今天
今天是: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代码,提高代码的可移植性。
上一篇:采用VB6.0编制的汉字处理程序
下一篇:单片机USB固件设计的实现
史海拾趣
|
程序如下BRLO(line 36)指令是根据进位标志C跳转的,它前面的CPI指令是如何影响到进位标志位C和零标志位Z来影响程序 流程的?r1初始值为0 avr034C: ldi YL, 0x5F &nb ...… 查看全部问答> |
|
随着亮度和能效的提升,延长使用寿命已经为促进基于高亮度发光二极管(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中的状态机设计要求。本文给出了采用这些技术的高速环境状态机设计的规范及分析方法和优化方法,并给出了相应的示例。 为了 ...… 查看全部问答> |
|
红色框框里面就是资源中心的连接! 在这里号召大家上传资料哦! 资料被分类了,查找起来应该比在论坛找方便多了,大家在填写标签的时候尽量详细些,这样下载查找也方便。… 查看全部问答> |




