Почему я не могу передать typedef или enum в Arduino?
следующий эскиз не удается скомпилировать в среде Arduino.
учитывая, что typedefs можно использовать в программном обеспечении Arduino, is Автоматическое Поколение Прототипа базовый механизм, который вызывает сбой? Если да, то что это и почему Arduino не предоставляет легкую оболочку вокруг C++?
#define PRODUCE_WACKY_COMPILETIME_ERROR
typedef int MyMeaningfulType;
#ifndef PRODUCE_WACKY_COMPILETIME_ERROR
void myFunc(MyMeaningfulType myParam);
#endif
void myFunc(MyMeaningfulType myParam)
{
myFunc(10);
}
void setup() {}
void loop() {}
в интересах поисковых систем, сообщается об ошибках:
error: variable or field 'myFunc' declared void
error: 'MyMeaningfulType' was not declared in this scope
2 ответов
пожалуйста, обратитесь кhttp://arduino.cc/en/Hacking/BuildProcess конкретная цитата:
This means that if you want to use a custom type as a function argument, you should declare it within a separate header file.
эта страница хорошо объясняет, как язык Arduino отличается от C/C++ в том, как он работает/предварительно обрабатывает файлы.
они пытаются создать прототипы для каждой функции, они находят. К сожалению, если вы определяете typedef в файле перед функцией и используете его в определении функции, место, куда они помещают прототип функции, не видит его, и это создает синтаксическую ошибку.
Если вы используете синтаксис "struct *" вместо этих определений функций, вы получаете выгоду от объекта "непрозрачный тип" C, в котором вы можете использовать определение структуры без его объявления заранее. Итак, сборка состоит в том, что ее использовать, но использовать определение struct в любой функции, что использовать typedef в аргументы.
typedef struct mytype_ {
int f1;
} mytype_t;
void myfunc(struct mytype_ * xxx) {
xxx->f1 = 1;
}