Проект не компилируется, когда я помещаю функции ниже вызовов функций

Я использую 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();
}

, 👍0

Обсуждение

вы пробовали их в Arduino IDE?, @Juraj

@juraj, я отредактировал свои примеры, чтобы вы могли скопировать/вставить их в редакторы. Оба примера работают в Arduino, только приведенный ниже работает в VSCode., @Jan

Конструктор Arduino добавляет прототипы функций при преобразовании .ino в .cpp, @Juraj


2 ответа


Лучший ответ:

5

Вы должны объявить свою функцию, прежде чем использовать ее. Таким образом, либо все тело функции должно быть перед использованием, либо вы должны добавить объявление прототипа функции.

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


0

Просто сделайте объявление абстрактного метода перед написанием кода после файлов заголовков.

#include<Arduino.h>
void myfunction();
void setup();
void loop();

После этого вы пишете свой код в любом порядке

,