-
- Поскольку сия проблема не имеет практической значимости, то никак: тупо забить. Или озвучьте реально существующую проблему. - SciFi(22.06.2013 23:06)
- Ну ё... Ну представьте, простейший случай. Вам надо мерять каналы встроенного АЦП. Вы их энумеруете typedef enum {CHAN_U220=4,CHAN_TOK=2,CHAN_COMMON=3}. Вы их пробегаете в цикле. Для результатов создаете массив int[3]. Случись добавление еще пару Юра(282 знак., 22.06.2013 23:50, )
- для такого случая удобнее const uint8_t array[] = {...}; - zeleny(23.06.2013 15:57)
- :) Без него, естественно, не обойтись. Но удобнее создать этот массив автоматически, х-макросами. И длину его взять как количество элементов энума. И присвоить значения ячейкам этого массива как?)) Рискую показаться банальным, но - тоже на основе Юра(172 знак., 24.06.2013 00:19, )
- Дык и сам enum тоже автоматически :) - Vladimir Ljaschko(24.06.2013 00:25)
- :) Без него, естественно, не обойтись. Но удобнее создать этот массив автоматически, х-макросами. И длину его взять как количество элементов энума. И присвоить значения ячейкам этого массива как?)) Рискую показаться банальным, но - тоже на основе Юра(172 знак., 24.06.2013 00:19, )
- перед enum добавить #define CHANNELS_NUM N. Забыть/пропустить трудно (если не последняя стадия склероза). - zeleny(23.06.2013 14:34)
- Напомнило: "Предположим, число Пи равно 18..." Скрипач(213 знак., 23.06.2013 09:26 - 09:32)
- Раз уж мы начали образовываться, следует напомнить про assert() и assert_static() -> SciFi(48 знак., 23.06.2013 00:33, ссылка)
- А как предполагается пробежать в цикле по enum? - 1111111(23.06.2013 00:08)
- Пробегаются не по энуму, а по каналам. Энум ЗДЕСЬ - это некий систематизированный дифайн, чтобы наглядно и удобно привязать символическое имя канала к его номеру. Потом, с помощью указаний X-MACRO, на основе этого энума компилятор автоматически Юра(286 знак., 23.06.2013 09:26, )
- Если уж на то пошло, то вот этот пример >>> на два порядка нагляднее. А желание изначально отталкиваться от enum это стопроцентные шашечки - 1111111(23.06.2013 11:09, ссылка)
- Дополнение. Если таблицей, то доступ по символьному имени тоже несложен 1111111(150 знак., 23.06.2013 11:21)
- Посмотрите, с чего начался пост - с enum'a. Была тема на электрониксе. Вот от него и плясал чтобы не уйти с темы. А наглядность - кому как. Тем более пример навскидку. - Юра(23.06.2013 11:19, )
- Если уж на то пошло, то вот этот пример >>> на два порядка нагляднее. А желание изначально отталкиваться от enum это стопроцентные шашечки - 1111111(23.06.2013 11:09, ссылка)
- отличный вопрос - koyodza(23.06.2013 00:23)
- Он выплывает из другого вопроса - зачем в данном примере вобще нужен enum? В таких случаях напрашивается банальная таблица с номерами каналов. И sizeof к ней применим - 1111111(23.06.2013 00:52)
- +1. Так правильней. Apтём(185 знак., 23.06.2013 06:09)
- +1. Именно так и делаю. - rezident(23.06.2013 03:29)
- Ну да, это попроще, чем пляски с "X macros". Видимо, коллега хочет опробовать новые методы. Опыт - он ведь сын ошибок трудных :-) - SciFi(23.06.2013 00:55)
- Макросы хороши когда они в тему. В данном примере цель хорошая и благородная, только надо не ругать ограниченность языка, а снять корону и посмотреть как решают задачу менее продвинутые коллеги - 1111111(23.06.2013 01:02)
- Дык я о том же. Язык не позволяет решить это совсем элегантно, так что чем-то придётся пожертвовать. Лично я с Вами - массив со списком каналов. Хрен с ней - с автоматизацией, да и не очень-то она тут и нужна. - SciFi(23.06.2013 01:05)
- Как это хрен с ней? Все решается элементарно, составляется список, а оттуда выковыриваются все значения. Vladimir Ljaschko(627 знак., 23.06.2013 01:12)
- Это то, что я назвал "пляски с X macros". Я бы избегал, если есть возможность. - SciFi(23.06.2013 01:14)
- Это как наркотик - я бы тоже избегал, но подсел прочно, и колюсь во всех проектах. - Vladimir Ljaschko(23.06.2013 01:18)
- Это другое: избежать нельзя, поскольку альтернативы не фонтан. Плюс "подсел", то есть можно быстро ввести в курс дела нового члена команды, так что проблемы нет. - SciFi(23.06.2013 01:21)
- Это действительно удобно. Особенно избавившись от "утомительного замачивания" #undef. - Юра(23.06.2013 09:31, )
- Ну не знаю, меня undef не утомляет. - Vladimir Ljaschko(23.06.2013 10:34)
- Вот нашел ресурс касательно нашего разговора. До дачи ссылки я недорос, но легко найдёте по словам Reduce C-language coding errors with X macros. - Юра(23.06.2013 11:12, )
- Цитата в нашу с SciFi пользу :) : "the use of x macros can reduce errors and make the embedded programmer's life easier" Vladimir Ljaschko(621 знак., 23.06.2013 11:52)
- Тоже использую у себя повсеместно для хранения конфигурации устройства. SciFi(165 знак., 23.06.2013 11:57)
- По-моему, насчет can reduce errors при элементарной автоматизации - это я талдычил... - Юра(23.06.2013 11:57, )
- ОК, "третьим будешь" - Vladimir Ljaschko(23.06.2013 12:06)
- Регистрация свободна и бесплатна. Сейчас поищу. - Vladimir Ljaschko(23.06.2013 11:35)
- Цитата в нашу с SciFi пользу :) : "the use of x macros can reduce errors and make the embedded programmer's life easier" Vladimir Ljaschko(621 знак., 23.06.2013 11:52)
- +1. Это как шашечки или ехать. - SciFi(23.06.2013 10:35)
- Однако многие считают код с вкраплениями undef менее читабельным, и даже называют его ugly)) Ладно, не хотите - дело ваше. - Юра(23.06.2013 10:40, )
- Я не пробовал, но разве что-то мешает грохнуть генерацию ошибки по отсутствию undef? Собственно, о чем спорим? В Вашем случае можно красивенько оформить массив переменных (в том числе структур). - Vladimir Ljaschko(23.06.2013 10:46 - 10:49)
- Ну что Вы! Ошибок просто нет и грохать нечего... - Юра(23.06.2013 10:51, )
- "Будут!" ;) - Vladimir Ljaschko(23.06.2013 10:54)
- Ну что Вы! Ошибок просто нет и грохать нечего... - Юра(23.06.2013 10:51, )
- А я, например, считаю, что детали подвески в авто ugly, а между тем без них никак нельзя. Так что все-таки "шашечки или ехать". - SciFi(23.06.2013 10:45)
- Я не пробовал, но разве что-то мешает грохнуть генерацию ошибки по отсутствию undef? Собственно, о чем спорим? В Вашем случае можно красивенько оформить массив переменных (в том числе структур). - Vladimir Ljaschko(23.06.2013 10:46 - 10:49)
- Однако многие считают код с вкраплениями undef менее читабельным, и даже называют его ugly)) Ладно, не хотите - дело ваше. - Юра(23.06.2013 10:40, )
- Вот нашел ресурс касательно нашего разговора. До дачи ссылки я недорос, но легко найдёте по словам Reduce C-language coding errors with X macros. - Юра(23.06.2013 11:12, )
- Ну не знаю, меня undef не утомляет. - Vladimir Ljaschko(23.06.2013 10:34)
- Это действительно удобно. Особенно избавившись от "утомительного замачивания" #undef. - Юра(23.06.2013 09:31, )
- Это другое: избежать нельзя, поскольку альтернативы не фонтан. Плюс "подсел", то есть можно быстро ввести в курс дела нового члена команды, так что проблемы нет. - SciFi(23.06.2013 01:21)
- Это как наркотик - я бы тоже избегал, но подсел прочно, и колюсь во всех проектах. - Vladimir Ljaschko(23.06.2013 01:18)
- Это то, что я назвал "пляски с X macros". Я бы избегал, если есть возможность. - SciFi(23.06.2013 01:14)
- Как это хрен с ней? Все решается элементарно, составляется список, а оттуда выковыриваются все значения. Vladimir Ljaschko(627 знак., 23.06.2013 01:12)
- Дык я о том же. Язык не позволяет решить это совсем элегантно, так что чем-то придётся пожертвовать. Лично я с Вами - массив со списком каналов. Хрен с ней - с автоматизацией, да и не очень-то она тут и нужна. - SciFi(23.06.2013 01:05)
- Макросы хороши когда они в тему. В данном примере цель хорошая и благородная, только надо не ругать ограниченность языка, а снять корону и посмотреть как решают задачу менее продвинутые коллеги - 1111111(23.06.2013 01:02)
- Он выплывает из другого вопроса - зачем в данном примере вобще нужен enum? В таких случаях напрашивается банальная таблица с номерами каналов. И sizeof к ней применим - 1111111(23.06.2013 00:52)
- Пробегаются не по энуму, а по каналам. Энум ЗДЕСЬ - это некий систематизированный дифайн, чтобы наглядно и удобно привязать символическое имя канала к его номеру. Потом, с помощью указаний X-MACRO, на основе этого энума компилятор автоматически Юра(286 знак., 23.06.2013 09:26, )
- Если так сильно хочется автоматизировать, то можно решить макросами. - SciFi(22.06.2013 23:59)
- Во! Это дело. Ну, покажите класс. Надерите им задницу)) - Юра(23.06.2013 00:04, )
- Слушай, у тебя на sizeof(enum) хватило фантазии, а на макросы - нет. Слабовато выступаешь. SciFi(231 знак., 23.06.2013 00:11)
- Во! Это дело. Ну, покажите класс. Надерите им задницу)) - Юра(23.06.2013 00:04, )
- Как я себе это представляю (с точки зрения непрофессионального программиста, коих большинство)... POV(83 знак., 22.06.2013 23:52)
- Какие изменения? Да через два года, когда всё забыл, требуют сделать модификацию, где надо добавить пару каналов, а? Не бывает? С дифайнами еще полазиите по программе ручками считать количество CHAN_xx и менять в нескольких местах, да не везде с Юра(115 знак., 23.06.2013 00:01, )
- Почему ручками ? Поиск рулит. - tesla(26.06.2013 21:12)
- ну положите рядом с enum ещё и define с объявлением количества каналов, если уж так приспичило. Можно найти и другие способы автоматизации, только опыт показывает, что нужно вовремя остановиться, чтобы автоматизация не стала самоцелью - koyodza(23.06.2013 00:06)
- Да это ж простейший enum... А когда в нём 75 членов? Обсчитаться проще простого. Не, ну если не хотите - как хотите, задачка и без того является вызовом. Буду решать. - Юра(23.06.2013 00:12, )
- Енум и 75 членов?! Тебе или в порно или.. не знаю куда, но вон из программистов!! - POV(23.06.2013 00:18)
- Батенька, Вам не пора спать? У меня в enum и по 80 членов если это машина состояний. - Юра(23.06.2013 00:22, )
- 80 - как-то многовато для машины, нужно по-другому значит как-то. - Apтём(23.06.2013 00:25)
- Есть технологии построения "многопоточных" программ, где задачи разбиваются на некие атомарные шаги или состояния(реализованные, например, в виде отдельных функций). Для некоторых задач требуется уйма коротких, четких шагов Юра(255 знак., 23.06.2013 09:48, )
- Вытесняющую многозадочность использовать нет возможности? Там состояния н нужны. - Apтём(23.06.2013 19:24)
- Продолжаем образовываться: protothreads -> - SciFi(23.06.2013 10:05, ссылка)
- Дело давнее... Так Вы умеете избавляться в x-macro от #undef? - Юра(23.06.2013 10:09, )
- Есть технологии построения "многопоточных" программ, где задачи разбиваются на некие атомарные шаги или состояния(реализованные, например, в виде отдельных функций). Для некоторых задач требуется уйма коротких, четких шагов Юра(255 знак., 23.06.2013 09:48, )
- Ищи более адекватные решения если енум стал проблемой. И только-то! - POV(23.06.2013 00:24)
- 80 - как-то многовато для машины, нужно по-другому значит как-то. - Apтём(23.06.2013 00:25)
- Батенька, Вам не пора спать? У меня в enum и по 80 членов если это машина состояний. - Юра(23.06.2013 00:22, )
- Енум и 75 членов?! Тебе или в порно или.. не знаю куда, но вон из программистов!! - POV(23.06.2013 00:18)
- Да это ж простейший enum... А когда в нём 75 членов? Обсчитаться проще простого. Не, ну если не хотите - как хотите, задачка и без того является вызовом. Буду решать. - Юра(23.06.2013 00:12, )
- Какие изменения? Да через два года, когда всё забыл, требуют сделать модификацию, где надо добавить пару каналов, а? Не бывает? С дифайнами еще полазиите по программе ручками считать количество CHAN_xx и менять в нескольких местах, да не везде с Юра(115 знак., 23.06.2013 00:01, )
- для такого случая удобнее const uint8_t array[] = {...}; - zeleny(23.06.2013 15:57)
- Ну ё... Ну представьте, простейший случай. Вам надо мерять каналы встроенного АЦП. Вы их энумеруете typedef enum {CHAN_U220=4,CHAN_TOK=2,CHAN_COMMON=3}. Вы их пробегаете в цикле. Для результатов создаете массив int[3]. Случись добавление еще пару Юра(282 знак., 22.06.2013 23:50, )
- Поскольку сия проблема не имеет практической значимости, то никак: тупо забить. Или озвучьте реально существующую проблему. - SciFi(22.06.2013 23:06)