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