Не могу использовать 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() {}

Что я упускаю?

, 👍0

Обсуждение

#включить <stdint.h>, @Juraj

Почему объявление str_len() находится в файле .c, а реализация — в файле .h?, @ocrdu


1 ответ


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

5

Использование #include <Arduino.h> в вашем myheader.h также включит <stdint.h> и, вероятно, решит эту проблему.

Среда разработки Arduino IDE автоматически включает Arduino.h в сам скетч, но, по-видимому, не для внешних материалов.

,