我被告知主要功能结束时的返回是程序的签名,表明程序是否成功完成。
似乎这个想法并不适用于微控制器,因为你在while(1)
循环中编写程序,甚至不像免费的RTOS那样操作系统。
为什么,在这种情况下,你会在主结束时返回0吗?谁或什么接受了回报?
答案 0 :(得分:2)
在hosted environment上,main
的签名允许两种基本变体:
int main(void)
int main(int, char **) // or synonym like char *[]
严格来说,return 0
永远不需要main
,因为标准明确指出5.1.2.2.3:
如果main函数的返回类型是与int兼容的类型,则从初始调用到main函数的返回等效于调用exit函数,其中main函数返回的值作为其参数到达}终止main函数返回值0.如果返回类型与int不兼容,则返回到主机环境的终止状态未指定。
长期建立的惯例0
意味着"没有错误"在这样的系统上(这是默认结果的原因)。
说,裸机控制器通常是freestanding environment。对于此类环境,未指定main
的签名。实际上甚至没有调用哪个函数作为应用程序的入口没有定义,而是留给了环境。使用main
只是一个常见的信息约定。它通常有
void main(void)
更好的是,他们定义了
_Noreturn void main(void)
这意味着main
永远不会回来。
但是,某些系统允许main
返回并标记特殊操作,例如冷复位,热复位,信号致命故障(如忙碌LED闪烁),电源关闭等。所以你需要一个经典的签名。
请注意,所有这些都超出了标准,必须由执行环境定义。
简要说明:来自return 0
的{{1}}对于托管环境来说是不,但明确说明是好的风格:"是的,没有错误在这里"。对于像您这样的独立环境,请检查文档和/或启动代码以获取正确的签名和允许的结果。