Страница 3 из 5

Re: AMS библиотеки

Добавлено: Сб сен 24, 2016 3:09 pm
alexsis_76
#define MY_PIN 10 директива препроцессора,она говорит что если встретишь MY_PIN то считай что это 10,ну а как можно переопределить значение макроса MY_PIN в скетче легко понять из сказанного :)

Re: AMS библиотеки

Добавлено: Сб сен 24, 2016 6:31 pm
Alex
#define MY_PIN 10 директива препроцессора,она говорит что если встретишь MY_PIN то считай что это 10,ну а как можно переопределить значение макроса MY_PIN в скетче легко понять из сказанного
Вы хотите сказать, что это невозможно? Я не уверен, но кажется в каких-то библиотеках я встречал что-то подобное.

Если это невозможно, то существуют какие-либо варианты решения этой проблемы, кроме передачи параметра в функцию?

Re: AMS библиотеки

Добавлено: Сб сен 24, 2016 6:36 pm
olehs
Если я Вас правильно понял, то можно сделать следующее:
В библиотеке определять макрос только если он не был определен ранее (#ifndef)
В скетче определять макрос перед #include библиотеки.

Re: AMS библиотеки

Добавлено: Сб сен 24, 2016 7:12 pm
Alex
Да, спасибо, похоже это должно сработать. Как проверю — доложу о результатах.

Попутно вопрос. Взял первую попавшуюся библиотеку MySensors. В скетче определяется макрос
#define MY_RADIO_NRF24
но используется он в библиотеке! А в скетче макрос определён перед #include. Это как раз тот приём, который вы описали?

Re: AMS библиотеки

Добавлено: Вс сен 25, 2016 2:33 am
alexsis_76
Область видимости имени, определенного директивой #define, простирается от определения до конца файла
не надо путать макроподстановку и глобальные переменные,создайте .h файл, там определите ваш макрос,включите .h в скетч библиотеки

Re: AMS библиотеки

Добавлено: Вс сен 25, 2016 7:26 am
Alex
Область видимости имени, определенного директивой #define, простирается от определения до конца файла
не надо путать макроподстановку и глобальные переменные,создайте .h файл, там определите ваш макрос,включите .h в скетч библиотеки
alexsis_76 , сравните ваши ответы и ответы olehs.

olehs отвечает на поставленные вопросы и реально помогает. Вы отвечаете на какие-то абстрактные вопросы, которые «летают» только в вашей голове.

Прочитайте мой предыдущий пост и свой ответ на него и ответьте себе на вопрос как они связаны между собой. На мой взгляд никак.

И с чего вы взяли, что я не вижу разницы между макроподстановкой и глобальными переменными (по вашей логике её не видят и авторы библиотеки MySensors)?

Re: AMS библиотеки

Добавлено: Вс сен 25, 2016 9:50 am
olehs
alexsis_76 имел в виду, что мой совет нерабочий.
Alex, почему не параметры ф-ции или глобальные переменные? (да, я знаю, что глобальные переменные - зло :) )

Re: AMS библиотеки

Добавлено: Вс сен 25, 2016 10:45 am
Alex
alexsis_76 имел в виду, что мой совет нерабочий
Разве он нерабочий? (я пока сам не проверял)
Alex, почему не параметры ф-ции или глобальные переменные? (да, я знаю, что глобальные переменные - зло :) )
В принципе можно и их. Я хочу понять мотивацию авторов MySensors, см. мой предыдущий вопрос и авторов многих других библиотек — если они так делают, значит на это должна быть какая-то причина.

Re: AMS библиотеки

Добавлено: Вс сен 25, 2016 10:58 am
olehs
Проверьте, пожалуйста, рабочий или нет.

Re: AMS библиотеки

Добавлено: Вс сен 25, 2016 11:05 am
alexsis_76
alexsis_76 имел в виду, что мой совет нерабочий.
alexsis_76 имел ввиду совсем не это
обычно макроподстановки помещают в файлы.h,там где мы хотим иметь их в исходном файле мы включаем файл .h
Alex, почему не параметры ф-ции или глобальные переменные
ну почему обязательно глобальные,можно и локальные,допустим у вас есть локальный массив,вы передаете в вызываемую функцию указатель на него и работаете,если хотите изменить переменную,передаете ее адрес