Условный выбор дефайна подскажите
- Войдите на сайт для отправки комментариев
Втр, 16/01/2018 - 11:10
Допустим:
#define MYLIB_USERSELECTED_OPERATEPIN (9) #include <mylib.h>
При этом неизвестно, налошил там пользователь перед подгрузкой или нет, то есть нельзя делать вещи типа
//#define MYLIB_USERSELECTED_OPERATE_ON_PIND0 //... #define MYLIB_USERSELECTED_OPERATE_ON_PIND9 //... //#define MYLIB_USERSELECTED_OPERATE_ON_PINA5
т. к. потом окажется, что комментарии убраны не у единственной строки.
Собственно вопрос.
Если цифра лежит в переменной, типа
byte x=5;
то можно сделать
switch(x){ //... case 5: /* do shit */ break; //... }
Есть ли это в макросах типа #if, #ifdef и т. п., то есть как поймать нужное значение интересующего дефайна, и соответственно родить нужный код внутри этого #if...#endif?
Так вроде ж Вы всё правильно написали, или я не понял вопроса?
Вот это то, что надо? Если нет - переформулируйте вопрос
https://gcc.gnu.org/onlinedocs/cpp/If.html#If
Или так
Или так
if defined(x) - это что-то из Перла :)
А Си есть специальные директивы #ifdef #ifndef
Или так
if defined(x) - это что-то из Перла :)
А Си есть специальные директивы #ifdef #ifndef
#if defined работает, штатная конструкция. Сделано как раз для множественных условий в директивах условной компиляции (пример приведён выше), когда при помощи #ifdef - получается громоздко и многоэтажно.
if defined(x) - это что-то из Перла :)
А Си есть специальные директивы #ifdef #ifndef
defined(x) можно комибрировать с сложные выражения с И, ИЛИ и НЕ. Для того и сделали. Иначе там бы дурдом получался.
К сожалению нет способа модифицировать тело #define функции в зависимости от #define константы. Из-за этого, #define функции не совсем тоже самое что inline функция в С++.
Это за рамками моего глупого разумения.
К сожалению нет способа модифицировать тело #define функции в зависимости от #define константы. Из-за этого, #define функции не совсем тоже самое что inline функция в С++.
Чой-то?
С константой:
К сожалению нет способа модифицировать тело #define функции в зависимости от #define константы. Из-за этого, #define функции не совсем тоже самое что inline функция в С++.
Можно, не так просто , но можно. И отличный пример тому проект 3D принтера Marlin. Там с дефайнами творят такие приколы, что создается впечатление, что можно обойтись без СИ :)
ссылка есть где почитать?
Это не модификация ТЕЛА дефайн-функции это выбор какой релиз использовать в зависимости от внешнего дефайна. Писал за именно модификацию, где внутри тела используется константа внешнего дефайна как модификатор. Попробуйте расписать свой пример, если Вам требуется 86 (число пинов Мега2560) реализаций некоторой функции, отличающиеся .. ровно 1 местом, да ещё и в каком-нить дефайн-конкатенаторе ## :)
ссылка есть где почитать?
Нашел. Автор, Вы это имели ввиду? https://github.com/MarlinFirmware/Marlin/tree/1.1.x/Marlin
Что там Вас поразило, бегло не вижу.. укажите поконкретней какой файл смотреть.
А вообще по макропроцессору мне сильно нравится это http://www.boost.org/doc/libs/1_55_0/libs/preprocessor/doc/index.html
ссылка есть где почитать?
Стебешся :) ? https://github.com/MarlinFirmware/Marlin
Что там Вас поразило, бегло не вижу.. укажите поконкретней какой файл смотреть.
Где я написал, что меня это поразило ? Просто в том проекте си меньше чем макросов.
Не хочу ковыряться в этом проекте снова. Смотрите внимательнее, там как раз и идет работа с ногами процессора с помощью дефайнов.
И все же, на вскидку
Или вот
Ну .. блин. Я то грешным делом подумал о чем-то ТА-АКОМ .. Это-то "элементарно", Ватсон! :)
Ну .. блин. Я то грешным делом подумал о чем-то ТА-АКОМ .. Это-то "элементарно", Ватсон! :)
Дык все гениальное просто, задача которую ставил ТС - решена? Или вы можете описать такую задачу, которую на уровне макросов не решить ? ;)
Не, не щас по крайней мере. Несколько иным занят.
Не у всех дома тридэ принтер. Мне без надобности, я обхожусь craft plotter-ом :)
Не у всех дома тридэ принтер. Мне без надобности, я обхожусь craft plotter-ом :)
точно - не каждый в гитхаб на принтере заехать может.
Ыыы.