为什么在主函数中返回0上传到微控制器?

时间:2016-07-05 13:35:24

标签: c atmega

我被告知主要功能结束时的返回是程序的签名,表明程序是否成功完成。

似乎这个想法并不适用于微控制器,因为你在while(1)循环中编写程序,甚至不像免费的RTOS那样操作系统。

为什么,在这种情况下,你会在主结束时返回0吗?谁或什么接受了回报?

1 个答案:

答案 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}}对于托管环境来说是,但明确说明是好的风格:"是的,没有错误在这里"。对于像您这样的独立环境,请检查文档和/或启动代码以获取正确的签名和允许的结果。