gpt4 book ai didi

c - 为什么上传到微 Controller 的main函数中返回0?

转载 作者:行者123 更新时间:2023-11-30 18:51:04 26 4
gpt4 key购买 nike

我被告知主函数末尾的返回是程序的签名,它表明程序是否成功完成。

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

为什么在这种情况下,你会在 main 末尾返回 0 ?谁或什么收到了返回?

最佳答案

hosted environment上,main的签名允许两种基本变体:

int main(void)

int main(int, char **) // or synonym like char *[]

严格来说return 0 main 从来不需要,因为标准明确指出5.1.2.2.3 :

If the return type of the main function is a type compatible with int, a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument reaching the } that terminates the main function returns a value of 0. If the return type is not compatible with int, the termination status returned to the host environment is unspecified.

按照长期以来建立的惯例0在此类系统上意味着“无错误”(这就是默认结果的原因)。

<小时/>

也就是说,裸机 Controller 通常是 freestanding environment 。对于此类环境,main 的签名没有指定。实际上连调用哪个函数作为应用程序的入口都没有定义,而是交给环境来决定。使用main这里只是一个常见的信息约定。它通常有一个签名

void main(void)

更好的是,他们定义了

_Noreturn void main(void)

这意味着main永远不会回来。

但是,某些系统允许 main返回并标记特殊行动,例如冷重置、热重置、信号致命故障(例如 LED 忙闪烁)、断电等。因此,您需要这里的经典签名之一。

请注意,所有这些都超出了标准,必须由您的执行环境定义。

<小时/>

简单地说:return 0来自int main(...)对于托管环境来说不需要,但是明确声明:“是的,这里没有错误”是一种很好的风格。对于像您这样的独立环境,请检查文档和/或启动代码以获得正确的签名和允许的结果。

关于c - 为什么上传到微 Controller 的main函数中返回0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com