Не могу использовать uint16_t в библиотеке
Интересно, почему следующий минимальный скетч не компилируется (неизвестное имя типа 'uint16_t'
):
sketch_does_not_compile.ino
:
#include "myheader.h"
void setup() {
char a[]="hello world";
uint16_t l=str_len(a);
Serial.println(l);
}
void loop() {}
myheader.c
:
uint16_t str_len(char* input_string) {
uint16_t i=0;
while (input_string[i++]!='\0');
return i;
}
myheader.h
:
#include "myheader.h"
uint16_t str_len(char* input_string);
Сбой компиляции:
myheader.c: At top level:
myheader.c:3:1: error: unknown type name 'uint16_t'
uint16_t str_len(char* input_string);
^
exit status 1
unknown type name 'uint16_t'
Использование uint16_t
в .ino-файле напрямую, как на скетче ниже, компилируется нормально.
sketch_compiles.ino
:
uint16_t str_len(char* input_string) {
uint16_t i=0;
while (input_string[i++]!='\0');
return i;
}
void setup() {
char a[]="hello world";
uint16_t l=str_len(a);
Serial.println(l);
}
void loop() {}
Что я упускаю?
@Sim Son, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 5
Использование #include <Arduino.h>
в вашем myheader.h также включит <stdint.h>
и, вероятно, решит эту проблему.
Среда разработки Arduino IDE автоматически включает Arduino.h в сам скетч, но, по-видимому, не для внешних материалов.
,
@ocrdu
Смотрите также:
- GSM-модуль IOT-GA6 Arduino + ошибка CME 58
- Ошибка: expected unqualified-id before 'if'
- Как запрограммировать ардуино на чистом C/C++?
- GCC msg "note: in definition of macro 'max'" сообщение об ошибке
- RtcDateTime' не называет тип
- как отправить аргумент объектам ESP8266WebServer в функции
- ошибка: expected primary-expression before '(' token
- Какие Arduino поддерживают ATOMIC_BLOCK?
#включить <stdint.h>
, @JurajПочему объявление str_len() находится в файле .c, а реализация — в файле .h?, @ocrdu