@red_crocodile

Область видимости c Arduino. Как передать define в библиотеку?

Здравствуйте! Я создал код вида
#define MAX_FIELDS 2
#include<library.h>
void setup(){...

Код библиотеки:
#pragma once
#include <Arduino.h>
#ifndef MAX_FIELDS
#define MAX_FIELDS 0
#endif
class Library{...


И всегда срабатывает ifndef. Помогите перенести MAX_FIELDS внутрь library.h
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Проблема в том, что .h файлы просто вставляются в .c файлы, когда вы делаете include.

Т.е. в файлe, который у вас первым приведен, который делает define 2 и include - MAX_FIELDS будет 2. А в файле library.c, который тоже делает include library.h - MAX_FIELDS уже будет 0.

Если MAX_FIELDS влияет на декларацию чего-то (например, размер массива в какой-то структуре), то вы получите ошибку на этапе линковки (потому что в разных объектах компиляции будут объявлены разные структуры). Иначе - присваивание MAX_FIELDS 2 в услолвном main.c ни на что не влияет.

Вам надо задавать MAX_FIELDS в опциях компиляции всего проекта. Обычно это ключ -D, или в Makefile оно его еще можно задать.

Еще альтернатива - вместо константы MAX_FIELDS передавайте значение в ваши функции, если можете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы