这是如何在 Arduino IDE 中编译的?
How does this compile in Arduino IDE?
我注意到以下代码,显然是无效的 C++,在 Arduino IDE(使用 AVR-GCC)中编译:
// The program compiles even when the following
// line is commented.
// void someRandomFunction();
void setup() {
// put your setup code here, to run once:
someRandomFunction();
}
void loop() {
// put your main code here, to run repeatedly:
}
void someRandomFunction() {
}
这是怎么回事? C++ 要求函数在使用前声明。当编译器到达 setup()
函数中的 someRandomFunction()
行时,它如何知道它会被声明?
这就是我们所说的前向声明,在 C++ 中,它只需要您在尝试使用函数之前声明函数的原型,而不是定义整个函数。:
以下两段代码为例:
代码 A:
#include <Arduino.h>
void setup(){}
void AA(){
// any code here
}
void loop(){
AA();
}
代码 B:
#include <Arduino.h>
void setup(){}
void loop(){
BB();
}
void BB(){
// any code here
}
严格来说,C 语言要求为编译器编译和 link 函数预先声明函数。所以在 CODE A 中我们没有声明函数而是定义了函数,这使得它对于正确的 C 代码是合法的。但是代码B在循环之后有函数定义,这对于普通C来说是非法的。解决方案如下:
#include <Arduino.h>
void BB();
void setup(){}
void loop(){
BB();
}
void BB(){
// any code here
}
但是,为了适应 Arduino 脚本格式,即在 void loop() 之后有一个 void setup(),Arduino 需要在其 IDE 上包含一个脚本,该脚本会自动查找函数并生成为您制作原型,因此您无需担心。因此,尽管是用 C++ 编写的,但您不会经常在他们的草图中看到使用前向声明的 Arduino 草图,因为它运行良好,而且通常更容易阅读先设置()和循环()。
您的文件是 .ino 而不是 .cpp。 .ino 是 'Arduino language'.
带有附加 ino 文件的主 ino 文件 are processed by the Arduino builder 到 C++ 源,然后才作为 C++ 处理(预处理器、编译)。
我注意到以下代码,显然是无效的 C++,在 Arduino IDE(使用 AVR-GCC)中编译:
// The program compiles even when the following
// line is commented.
// void someRandomFunction();
void setup() {
// put your setup code here, to run once:
someRandomFunction();
}
void loop() {
// put your main code here, to run repeatedly:
}
void someRandomFunction() {
}
这是怎么回事? C++ 要求函数在使用前声明。当编译器到达 setup()
函数中的 someRandomFunction()
行时,它如何知道它会被声明?
这就是我们所说的前向声明,在 C++ 中,它只需要您在尝试使用函数之前声明函数的原型,而不是定义整个函数。:
以下两段代码为例:
代码 A:
#include <Arduino.h>
void setup(){}
void AA(){
// any code here
}
void loop(){
AA();
}
代码 B:
#include <Arduino.h>
void setup(){}
void loop(){
BB();
}
void BB(){
// any code here
}
严格来说,C 语言要求为编译器编译和 link 函数预先声明函数。所以在 CODE A 中我们没有声明函数而是定义了函数,这使得它对于正确的 C 代码是合法的。但是代码B在循环之后有函数定义,这对于普通C来说是非法的。解决方案如下:
#include <Arduino.h>
void BB();
void setup(){}
void loop(){
BB();
}
void BB(){
// any code here
}
但是,为了适应 Arduino 脚本格式,即在 void loop() 之后有一个 void setup(),Arduino 需要在其 IDE 上包含一个脚本,该脚本会自动查找函数并生成为您制作原型,因此您无需担心。因此,尽管是用 C++ 编写的,但您不会经常在他们的草图中看到使用前向声明的 Arduino 草图,因为它运行良好,而且通常更容易阅读先设置()和循环()。
您的文件是 .ino 而不是 .cpp。 .ino 是 'Arduino language'.
带有附加 ino 文件的主 ino 文件 are processed by the Arduino builder 到 C++ 源,然后才作为 C++ 处理(预处理器、编译)。