我知道在计算机中,该main()
函数返回的值由操作系统接收。但是,main()
微控制器的功能会发生什么?
main
具有两种不同签名的两种形式,两者都返回int
。如果您使用的是独立的C实现,则该实现将指示您应如何编写启动函数。您不能void
仅仅因为不返回就编写返回函数。不返回的行为不同于影响总体调用约定的函数类型。
我知道在计算机中,该main()
函数返回的值由操作系统接收。但是,main()
微控制器的功能会发生什么?
main
具有两种不同签名的两种形式,两者都返回int
。如果您使用的是独立的C实现,则该实现将指示您应如何编写启动函数。您不能void
仅仅因为不返回就编写返回函数。不返回的行为不同于影响总体调用约定的函数类型。
Answers:
在微控制器上,main()
实际上并没有预期会退出,如果没有定义,则行为也没有定义-因此,由谁为微控制器编写C运行时决定。我见过以下系统:
main()
,因此,如果退出,则只需再次调用它即可。main()
退出就会执行。main()
。这称为“逃入杂草”。我从未见过使用所返回的值实际执行任何操作的人main()
。如果这是您真正关心的事情,那么您应该查看并可能修改系统C运行时库的源代码。
main()
具有int
返回值的C标准显然不是在设计无OS微控制器的情况下设计的。因此,这是未指定的行为,并且可能会发生任何事情,具体取决于您的C运行时,如Dave所列。
main()
,更不用说定义其返回值了。这取决于实现者。
void main( void )
是实现定义的行为,而不是未指定的行为。
main()
。
常见的误解/误解是int main
该标准指定的唯一有效形式。那是不对的。
C标准涉及两种实现:托管和独立。在这种情况下,“实施”是指编译器。托管编译器针对特定的OS进行编译,而独立编译器针对特定的裸机应用进行编译。嵌入式系统几乎总是独立的系统-即使是RTOS。
独立的实现可以使用任何形式main()
,它们甚至不需要具有称为main的功能。大多数情况下,他们使用这种形式void main (void)
,因为返回任何东西都没有意义。
在这里要意识到的重要一点是,始终由编译器来决定格式,main()
而不是由程序员来决定。
确实从中返回某些东西的独立实现main()
是非常可疑的。让您想知道编写编译器的人员是否真的阅读了标准...
它(如提到的其他答案)取决于您的工具链,但是例如在GCC main
中将其编译为其他函数,因此其返回值将根据调用约定进行存储(在ARM上我不正确使用GCC,它将被放到R0中)在返回之前)。
我猜这在AVR-GCC上是类似的,因此自定义脚本可以在主返回后使用此值。
main
可以获取其返回值。当然,在99.9%的情况下它会被忽略,但是答案提供了可以接收此返回值的信息。