|
|
|
А почему так инициализация |
|
|
|
Jul 25 2018, 15:30
|
Гуру
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493
|
Еще интересный вопрос возник. Как вам такая штука Код int searchDB (int v) { //.............. } .... main... searchDB('1234'); Тут gcc дает warning что то там multibyte, точно не помню. Просто интересное применение, раньше как-то не встречал такую идею. Цитата(Forger @ Jul 25 2018, 18:26) Вполне возможно, что у него соотв. ворнинги запрещены через соотв. ключи компиляции самой средой. По умолчанию? Он ругается на куда более безопасные вещи. Ну ладно, с этим вопросом разобрались вроде
|
|
|
|
|
Jul 25 2018, 15:30
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(DASM @ Jul 25 2018, 18:27) Еще интересный вопрос возник. Как вам такая штука Код int searchDB (int v) .... searchDB('1234'); Тут gcc дает warning что то там multibyte, точно не помню. Просто интересное применение, раньше как-то не встречал такую идею. На известном ресурсе полно подобного "кода". Смысл его тут цитировать? Код Он ругается на куда более безопасные вещи M$ - уже давно не образец для подражания.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 25 2018, 15:39
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(DASM @ Jul 25 2018, 18:31) Стоп стоп. Почему Вы считаете это говнокодом и как бы Вы сделали, не городя монстра? Разве не очевидно? Функция ожидает int, а получает то, что дадут. В подобных ситуациях делают ряд функций, каждая из которых работает со своим типом данных. Либо передается в одну функцию ссылка на определенную структура, где заранее расписаны "детали" поиска и что искать. Существуют и другие способы, но там уже используются чисто плюсы и их "фишки". Цитата По сути из имени получается бесплатно подобие хэша. Неявно, неочевидно. Со временем развития проекта из-за этого могут возникнуть проблемы, которые найти будет довольно сложно. Компилятор заругается, если будет не 4 цифры, а больше или int на неком железе окажется равным не 4 байтам. Но ведь это лишь предупреждение... Не дай бог это попадет в библиотеку, где линкер при сборке этого просто не увидит! А если дать всего 3 цифры, то что получит на входе функция? Лотерею из мусора в стеке?...
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 25 2018, 16:01
|
Гуру
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493
|
Цитата(Forger @ Jul 25 2018, 18:39) Разве не очевидно? Функция ожидает int, а получает то, что дадут. В подобных ситуациях делают ряд функций, каждая из которых работает со своим типом данных. Либо передается в одну функцию ссылка на определенную структура, где заранее расписаны "детали" поиска и что искать. Существуют и другие способы, но там уже используются чисто плюсы и их "фишки".
Неявно, неочевидно. Со временем развития проекта из-за этого могут возникнуть проблемы, которые найти будет довольно сложно. Компилятор заругается, если будет не 4 цифры, а больше или int на неком железе окажется равным не 4 байтам. Но ведь это лишь предупреждение... Не дай бог это попадет в библиотеку, где линкер при сборке этого просто не увидит! А если дать всего 3 цифры, то что получит на входе функция? Лотерею из мусора в стеке?... Думаю Вы правы. Просто дали проект, сижу разбираюсь. Многие вещи интересные. Причем 90% кода по всем правилам, что наводит на мысли об опыте автора. А раз применяет такие трюки - может в этом есть смысл? Я то сам пишу удивительно пресный код, таких открытий он не сулит. Но у меня обычно больший overhead, не люблю оптимизировать
|
|
|
|
|
Jul 25 2018, 16:10
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(DASM @ Jul 25 2018, 19:01) Просто дали проект, сижу разбираюсь. Сочувствую Доделывать начатое за другими - мало кому по кайфу ... Цитата Но у меня обычно больший overhead, не люблю оптимизировать В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?"
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 25 2018, 16:19
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(DASM @ Jul 25 2018, 18:31) Иначе варианты начинают хотеть 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')) И выглядит почти так же и о порядке следования байт гадать не приходится. Цитата(Forger @ Jul 25 2018, 19:10) В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" Такие ситуации обычно бывают при уровне задач, а ля "а не помигать ка мне светодиодом?". Имхо. Во всех моих реальных проектах везде в обрез или памяти или быстродействия. А если не в обрез, то значит неправильно выбран МК и надо выбрать подешевле.
|
|
|
|
|
Jul 25 2018, 16:24
|
Гуру
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493
|
Цитата(Forger @ Jul 25 2018, 19:10) Сочувствую Доделывать начатое за другими - мало кому по кайфу ... В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" Не, сочувствовать не надо. Я во всех чужих программах ищу и нахожу что то новое. Может через месяц я начну переделывать ее, но уже имея в багаже чужие трюки и подходы. Есть плохие места, есть интересные. Знания лишние не бывают. Операционку он ucos юзал, не в восторге, но работает. Я хотел бы scmRTOS, но это потом. Кстати крутая программистка, которая тоже сидела над этим проектом за нее. Но увы, у девушек редко хорошо с железом,, поэтому с ней расстались. Хотя в плане академического программирования - все красиво и хорошо.
|
|
|
|
|
Jul 25 2018, 16:31
|
Местный
Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264
|
Цитата(jcxz @ Jul 25 2018, 19:19) Нормально делается и без 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?
|
|
|
|
|
Jul 25 2018, 16:33
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(DASM @ Jul 25 2018, 19:24) Не, сочувствовать не надо. Я во всех чужих программах ищу и нахожу что то новое. Ну, если цель в этом, то другое дело Цитата Операционку он ucos юзал, не в восторге, но работает. Я хотел бы scmRTOS, но это потом. А не все ли равно? Особенно, если камень выбран с достаточным запасом. К примеру, мои проекты уже давно лишены привязки к конкретной RTOS, менять ось - дело двух минут, хотя такой задачи изначально не ставилось. Просто, свой код читать всегда проще и чем его больше в соотношении с чужим кодом, тем проще сопровождать такой проект. Имхо! Цитата Кстати крутая программистка .... поэтому с ней расстались. Логично
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Jul 25 2018, 16:49
|
Гуру
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493
|
Цитата(Forger @ Jul 25 2018, 19:33) Ну, если цель в этом проблема в собеседованиях. Давно были? Я не знаю, почему у проводящих их такие олимпиадные вопросы. По большому счету все что они спрашивают - никогда не надо. Причем язык С очень располагает к трюкам, оные я тоже не люблю. К счастью все это в прошлом, есть хорошая работа, где нужен результат, а не трюкачество насчет двух минут смены горячитесь, у многих еще и менджер памяти свой, бывают тонкости
|
|
|
|
|
Jul 25 2018, 17:05
|
Профессионал
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831
|
Цитата(DASM @ Jul 25 2018, 19:49) проблема в собеседованиях. Давно были? Всегда спрашиваю просто: наличие законченных проектов и куски кода оттуда для примера. Хотя бы это. Остальные качества выясняются на испыт. сроке )) Цитата насчет двух минут смены горячитесь Да, погорячился На самом деле намного меньше: из списка доступных билдов нужно лишь выбрать нужный под нужную ОСь и пересобрать проект )) Сам код не зависит от оси (простейшая "обертка"). Делалось с целью выяснить, какая ось шустрее и меньше жрет памяти. Да и потом читать код с нормальными и более понятыми лично мне названиями функций-сервисов RTOS куда проще, чем разбираться со своим же кодом, вооружившись мануалом на ось ))) Цитата , у многих еще и менджер памяти свой В известных целях не использую дин. память, хотя свой менеджер есть, на базе известного TLSF.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|