Проект не компилируется, когда я помещаю функции ниже вызовов функций
Я использую VSCode, а не Arduino IDE. Я видел и пытался использовать множество фрагментов кода, которые предоставляются для проектов Arduino...
Поэтому, когда я копирую/вставляю эти примеры в свой VSCode и пытаюсь скомпилировать, он терпит неудачу. (Не поверю, что люди предлагают нерабочие примеры.)
Когда я помещаю функции над вызовами функций, они компилируются.
Является ли это нормальным поведением или мне нужно добавить некоторые настройки, чтобы все работало, как предусмотрено?
Сбой в VSCode (работает в Arduino IDE):
#include "Arduino.h"
void setup() {
}
int zero = 0;
void loop() {
zero = myfunction();
}
int myfunction(){
return 0;
}
Работает в VSCode (Работает в Arduino IDE):
#include "Arduino.h"
void setup() {
}
int zero = 0;
int myfunction(){
return 0;
}
void loop() {
zero = myfunction();
}
@Jan, 👍0
Обсуждение2 ответа
Лучший ответ:
Вы должны объявить свою функцию, прежде чем использовать ее. Таким образом, либо все тело функции должно быть перед использованием, либо вы должны добавить объявление прототипа функции.
void myfunction();
myfunction();
void myfunction(){
return 0;
}
Если я правильно вас понял, это можно сделать в заголовочном файле? Я никогда не видел их в примерах, которые использовал. Но это имело бы смысл..., @Jan
Я думаю, что Arduino IDE творит за кулисами некоторую «магию», чтобы иметь возможность компилировать без объявления функций над вызовом функции. Я также обновил свои примеры, чтобы иметь возможность копировать и вставлять их в соответствующие IDE., @Jan
void myfunction() не должен возвращать целое число, @SBF
@ Ян: Действительно. Arduino IDE редактирует ваш файл .ino, добавляет эти прототипы функций в начало файла, сохраняет результат как файл .cpp и вызывает компилятор C++ (g++) для компиляции этого .cpp., @Edgar Bonet
@ Ян, почему ты принял ответ, который не отвечает на твой вопрос?, @Juraj
Просто сделайте объявление абстрактного метода перед написанием кода после файлов заголовков.
#include<Arduino.h>
void myfunction();
void setup();
void loop();
После этого вы пишете свой код в любом порядке
- Множественная ошибка определения при связывании firmware.elf
- Что мне делать с StackOverflow при ошибке компиляции?
- Библиотека не найдена при использовании команды arduino-cli (хотя работает с Arduino IDE)
- Разбить большой файл на более мелкие файлы
- Как скомпилировать разные скетчи в разных рабочих пространствах кода Visual Studio
- Ошибка компиляции в Ubuntu 18.04
- Статус выхода 1 не может скомпилироваться
- Ошибка: expected unqualified-id before 'if'
вы пробовали их в Arduino IDE?, @Juraj
@juraj, я отредактировал свои примеры, чтобы вы могли скопировать/вставить их в редакторы. Оба примера работают в Arduino, только приведенный ниже работает в VSCode., @Jan
Конструктор Arduino добавляет прототипы функций при преобразовании .ino в .cpp, @Juraj