6

Arduino平台上的C++程序没有main()其他平台上的功能;相反,它必须有两个名为setup()和的函数loop()。但根据 C++ 标准 - 所有 C++ 程序都必须有一个main()函数。

那么,这样的 C++ 代码是否符合标准?Arduino 上的 C++ 编译器/链接器/加载器是否符合标准?

4

2 回答 2

5

C++ 标准提供了两种执行环境:独立式和托管式。这里的大多数人都在托管环境中运行,您的程序以main(). 嵌入式系统在独立环境中运行,程序启动是通过实现定义的机制进行的。独立环境的编译器可以省略标准库的某些部分。有关更多详细信息,请参见此处

所以,setup()并且loop()在独立的环境中是可以的。不需要main()。我不知道 Arduino 的库是否符合标准中的要求。

在托管环境中,通常有一个操作系统(主机)可以让您启动程序。用于这种环境的 C++ 程序必须具有main(). 在独立环境中,程序通常在设备打开时启动。这更接近于金属,并且允许系统有自己的要求,以简化启动应用程序的样板代码。

于 2020-10-28T21:26:36.847 回答
2

只是在这里大声说出来:有一个main.cpp 大致如下所示:

#include <Arduino.h>

int main(void) {
  init();
  setup();
  for (;;) {
    loop();
  }
  return 0;
}

Arduino IDE 提供了它。它还会生成函数原型(如果它们还没有的话),并做一些其他的事情。

因此,main()Arduino IDE 中可见代码中没有 a 并不意味着它不存在,或者它违反了标准。

于 2020-12-03T20:36:21.480 回答