【发布时间】:2021-01-12 21:02:51
【问题描述】:
我注意到以下代码,显然是无效的 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 代码?
-
Arduino C++ 更像是 C++ 的一种方言,实际上是“C++”。尽管如此,I cannot reproduce。您使用的是哪个版本?有哪些编译器选项?
-
要添加到@AdrianMole 的评论中,该程序所在的文件的名称是什么? C accepts it with warnings
-
Arduino“草图”和许多库在很大程度上是一个非常臃肿和愚蠢的 C++ 变体,仅适用于那些避免阅读和学习,只喜欢复制和粘贴的修补匠和学生。如果您想为大多数这些嵌入式设备创建真正的软件,请放弃 .INO 并使用汇编或 C 编写。避免动态分配。
-
正如@Shuyna 所暗示的那样,幕后发生了很多事情。您的
*ino文件会被预处理,并且会自动为您创建函数声明。这就是为什么我们不必在使用之前声明函数的原因。它还调用标准avr-gcc来编译您的程序、链接库并创建用于上传的十六进制文件。一键完成。在首选项中,在编译期间打开详细输出,您将看到一切正常。有些人对它有真正的仇恨;对我来说,这是一个完成工作的简单工具。 (自 1981 年开始编写 C)。