问题描述
Arduino平台上的
C ++程序没有其他平台上的main()
功能;相反,它必须具有两个名为setup()
和loop()
的函数。但是根据C ++标准-所有C ++程序都必须具有main()
函数。
那么,这样的C ++代码符合标准吗? Arduino上的C ++编译器/链接器/加载器是否符合标准?
解决方法
C ++标准提供了两种执行环境:独立式和托管式。这里的大多数人都在托管环境中运行,在该环境中您的程序从main()
开始。嵌入式系统在独立的环境中运行,在该环境中,程序是通过实现定义的机制启动的。独立环境的编译器可以省略标准库的某些部分。有关更多详细信息,请see here。
因此,setup()
和loop()
在独立的环境中还可以。不需要main()
。我不知道Arduino的库是否符合标准中的要求。
在托管环境中,通常有一个操作系统(主机)可让您启动程序。用于这种环境的C ++程序必须具有main()
。在独立的环境中,程序通常在打开设备电源时启动。它更接近金属,并且允许系统有其自己的要求,以便简化触发应用程序的样板代码。
只是在这里大声说了一下:那里是一个main.cpp,它看起来像这样:
#include <Arduino.h>
int main(void) {
init();
setup();
for (;;) {
loop();
}
return 0;
}
Arduino IDE提供了它。如果还没有函数原型,它还会生成函数原型,并执行其他一些操作。
因此,在Arduino IDE的可见代码中没有main()
并不表示它不存在,或不符合标准。