DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Еще интересный вопрос возник. Как вам такая штука int searchDB (int v) { //.............. } .... main... searchDB('1234'); Тут gcc дает warning что то там multibyte, точно не помню. Просто интересное применение, раньше как-то не встречал такую идею. Вполне возможно, что у него соотв. ворнинги запрещены через соотв. ключи компиляции самой средой. По умолчанию? Он ругается на куда более безопасные вещи. Ну ладно, с этим вопросом разобрались вроде Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Еще интересный вопрос возник. Как вам такая штука int searchDB (int v) .... searchDB('1234'); Тут gcc дает warning что то там multibyte, точно не помню. Просто интересное применение, раньше как-то не встречал такую идею. На известном ресурсе полно подобного "кода". Смысл его тут цитировать? Он ругается на куда более безопасные вещи M$ - уже давно не образец для подражания. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба На известном ресурсе полно подобного "кода". Смысл его тут цитировать? Стоп стоп. Почему Вы считаете это говнокодом и как бы Вы сделали, не городя монстра? По сути из имени получается бесплатно подобие хэша. Иначе варианты начинают хотеть strcmp, или, страшно сказать std::map . А тут бесплатно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Стоп стоп. Почему Вы считаете это говнокодом и как бы Вы сделали, не городя монстра? Разве не очевидно? Функция ожидает int, а получает то, что дадут. В подобных ситуациях делают ряд функций, каждая из которых работает со своим типом данных. Либо передается в одну функцию ссылка на определенную структура, где заранее расписаны "детали" поиска и что искать. Существуют и другие способы, но там уже используются чисто плюсы и их "фишки". По сути из имени получается бесплатно подобие хэша.Неявно, неочевидно. Со временем развития проекта из-за этого могут возникнуть проблемы, которые найти будет довольно сложно. Компилятор заругается, если будет не 4 цифры, а больше или int на неком железе окажется равным не 4 байтам. Но ведь это лишь предупреждение... Не дай бог это попадет в библиотеку, где линкер при сборке этого просто не увидит! А если дать всего 3 цифры, то что получит на входе функция? Лотерею из мусора в стеке?... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Разве не очевидно? Функция ожидает int, а получает то, что дадут. В подобных ситуациях делают ряд функций, каждая из которых работает со своим типом данных. Либо передается в одну функцию ссылка на определенную структура, где заранее расписаны "детали" поиска и что искать. Существуют и другие способы, но там уже используются чисто плюсы и их "фишки". Неявно, неочевидно. Со временем развития проекта из-за этого могут возникнуть проблемы, которые найти будет довольно сложно. Компилятор заругается, если будет не 4 цифры, а больше или int на неком железе окажется равным не 4 байтам. Но ведь это лишь предупреждение... Не дай бог это попадет в библиотеку, где линкер при сборке этого просто не увидит! А если дать всего 3 цифры, то что получит на входе функция? Лотерею из мусора в стеке?... Думаю Вы правы. Просто дали проект, сижу разбираюсь. Многие вещи интересные. Причем 90% кода по всем правилам, что наводит на мысли об опыте автора. А раз применяет такие трюки - может в этом есть смысл? Я то сам пишу удивительно пресный код, таких открытий он не сулит. Но у меня обычно больший overhead, не люблю оптимизировать Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Просто дали проект, сижу разбираюсь. Сочувствую :( Доделывать начатое за другими - мало кому по кайфу ... Но у меня обычно больший overhead, не люблю оптимизироватьВ таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" ;) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 190 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Иначе варианты начинают хотеть strcmp, или, страшно сказать std::map . А тут бесплатно Нормально делается и без strcmp: #define M(x0,x1,x2,x3) ((uint)(u8)(x0) | (uint)(u8)(x1) << 8 | (uint)(u8)(x2) << 16 | (uint)(u8)(x3) << 24) searchDB(M('1','2','3','4')) И выглядит почти так же и о порядке следования байт гадать не приходится. В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" ;) Такие ситуации обычно бывают при уровне задач, а ля "а не помигать ка мне светодиодом?". Имхо. Во всех моих реальных проектах везде в обрез или памяти или быстродействия. А если не в обрез, то значит неправильно выбран МК и надо выбрать подешевле. :laughing: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Сочувствую :( Доделывать начатое за другими - мало кому по кайфу ... В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" ;) Не, сочувствовать не надо. Я во всех чужих программах ищу и нахожу что то новое. Может через месяц я начну переделывать ее, но уже имея в багаже чужие трюки и подходы. Есть плохие места, есть интересные. Знания лишние не бывают. Операционку он ucos юзал, не в восторге, но работает. Я хотел бы scmRTOS, но это потом. Кстати крутая программистка, которая тоже сидела над этим проектом за нее. Но увы, у девушек редко хорошо с железом,, поэтому с ней расстались. Хотя в плане академического программирования - все красиво и хорошо. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Нормально делается и без strcmp: #define M(x0,x1,x2,x3) ((uint)(u8)(x0) | (uint)(u8)(x1) << 8 | (uint)(u8)(x2) << 16 | (uint)(u8)(x3) << 24) searchDB(M('1','2','3','4')) Зачем приводить к u8, а потом к uint? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Не, сочувствовать не надо. Я во всех чужих программах ищу и нахожу что то новое. Ну, если цель в этом, то другое дело :) Операционку он ucos юзал, не в восторге, но работает. Я хотел бы scmRTOS, но это потом. А не все ли равно? Особенно, если камень выбран с достаточным запасом. К примеру, мои проекты уже давно лишены привязки к конкретной RTOS, менять ось - дело двух минут, хотя такой задачи изначально не ставилось. Просто, свой код читать всегда проще и чем его больше в соотношении с чужим кодом, тем проще сопровождать такой проект. Имхо! Кстати крутая программистка .... поэтому с ней расстались. Логично :biggrin: Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Ну, если цель в этом проблема в собеседованиях. Давно были? Я не знаю, почему у проводящих их такие олимпиадные вопросы. По большому счету все что они спрашивают - никогда не надо. Причем язык С очень располагает к трюкам, оные я тоже не люблю. К счастью все это в прошлом, есть хорошая работа, где нужен результат, а не трюкачество насчет двух минут смены горячитесь, у многих еще и менджер памяти свой, бывают тонкости Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба проблема в собеседованиях. Давно были? Всегда спрашиваю просто: наличие законченных проектов и куски кода оттуда для примера. Хотя бы это. Остальные качества выясняются на испыт. сроке )) насчет двух минут смены горячитесь Да, погорячился :) На самом деле намного меньше: из списка доступных билдов нужно лишь выбрать нужный под нужную ОСь и пересобрать проект )) Сам код не зависит от оси (простейшая "обертка"). Делалось с целью выяснить, какая ось шустрее и меньше жрет памяти. Да и потом читать код с нормальными и более понятыми лично мне названиями функций-сервисов RTOS куда проще, чем разбираться со своим же кодом, вооружившись мануалом на ось ))) , у многих еще и менджер памяти свой В известных целях не использую дин. память, хотя свой менеджер есть, на базе известного TLSF. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Ни разу не видел еще готовый проект с кучей доступных билдов под разные ядра. Даже hello world не видел Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Ни разу не видел еще готовый проект с кучей доступных билдов под разные ядра. Я тоже. А зачем это вообще делать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 25 июля, 2018 Опубликовано 25 июля, 2018 · Жалоба Я тоже. А зачем это вообще делать? А как понять "из списка доступных билдов нужно лишь выбрать нужный под нужную ОСь и пересобрать проект"? Под ядро я имел в виду ось, ибо эмбеддерские это все же больше ядра просто, иногда с плюшками, не суть Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться