Перейти к содержанию
    

А почему так инициализация

Еще интересный вопрос возник. Как вам такая штука

int searchDB (int v)
{
//..............
}
.... main...
searchDB('1234');

Тут gcc дает warning что то там multibyte, точно не помню. Просто интересное применение, раньше как-то не встречал такую идею.

 

Вполне возможно, что у него соотв. ворнинги запрещены через соотв. ключи компиляции самой средой.

По умолчанию? Он ругается на куда более безопасные вещи. Ну ладно, с этим вопросом разобрались вроде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще интересный вопрос возник. Как вам такая штука

int searchDB (int v)
....
searchDB('1234');

Тут gcc дает warning что то там multibyte, точно не помню. Просто интересное применение, раньше как-то не встречал такую идею.

На известном ресурсе полно подобного "кода". Смысл его тут цитировать?

 

Он ругается на куда более безопасные вещи

M$ - уже давно не образец для подражания.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На известном ресурсе полно подобного "кода". Смысл его тут цитировать?

Стоп стоп. Почему Вы считаете это говнокодом и как бы Вы сделали, не городя монстра? По сути из имени получается бесплатно подобие хэша. Иначе варианты начинают хотеть strcmp, или, страшно сказать std::map . А тут бесплатно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стоп стоп. Почему Вы считаете это говнокодом и как бы Вы сделали, не городя монстра?

Разве не очевидно? Функция ожидает int, а получает то, что дадут.

В подобных ситуациях делают ряд функций, каждая из которых работает со своим типом данных.

Либо передается в одну функцию ссылка на определенную структура, где заранее расписаны "детали" поиска и что искать.

Существуют и другие способы, но там уже используются чисто плюсы и их "фишки".

 

По сути из имени получается бесплатно подобие хэша.
Неявно, неочевидно. Со временем развития проекта из-за этого могут возникнуть проблемы, которые найти будет довольно сложно.

Компилятор заругается, если будет не 4 цифры, а больше или int на неком железе окажется равным не 4 байтам. Но ведь это лишь предупреждение... Не дай бог это попадет в библиотеку, где линкер при сборке этого просто не увидит!

А если дать всего 3 цифры, то что получит на входе функция? Лотерею из мусора в стеке?...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разве не очевидно? Функция ожидает int, а получает то, что дадут.

В подобных ситуациях делают ряд функций, каждая из которых работает со своим типом данных.

Либо передается в одну функцию ссылка на определенную структура, где заранее расписаны "детали" поиска и что искать.

Существуют и другие способы, но там уже используются чисто плюсы и их "фишки".

 

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

Компилятор заругается, если будет не 4 цифры, а больше или int на неком железе окажется равным не 4 байтам. Но ведь это лишь предупреждение... Не дай бог это попадет в библиотеку, где линкер при сборке этого просто не увидит!

А если дать всего 3 цифры, то что получит на входе функция? Лотерею из мусора в стеке?...

Думаю Вы правы. Просто дали проект, сижу разбираюсь. Многие вещи интересные. Причем 90% кода по всем правилам, что наводит на мысли об опыте автора. А раз применяет такие трюки - может в этом есть смысл? Я то сам пишу удивительно пресный код, таких открытий он не сулит. Но у меня обычно больший overhead, не люблю оптимизировать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто дали проект, сижу разбираюсь.

Сочувствую :( Доделывать начатое за другими - мало кому по кайфу ...

 

Но у меня обычно больший overhead, не люблю оптимизировать
В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" ;)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иначе варианты начинают хотеть 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сочувствую :( Доделывать начатое за другими - мало кому по кайфу ...

 

В таких ситуациях когда флэш очень толстая и камень имеет огромный запас производительности я задаю себе один простой вопрос: "а стоит ли овчинка выделки?" ;)

Не, сочувствовать не надо. Я во всех чужих программах ищу и нахожу что то новое. Может через месяц я начну переделывать ее, но уже имея в багаже чужие трюки и подходы. Есть плохие места, есть интересные. Знания лишние не бывают.

Операционку он ucos юзал, не в восторге, но работает. Я хотел бы scmRTOS, но это потом. Кстати крутая программистка, которая тоже сидела над этим проектом за нее. Но увы, у девушек редко хорошо с железом,, поэтому с ней расстались. Хотя в плане академического программирования - все красиво и хорошо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нормально делается и без 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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, сочувствовать не надо. Я во всех чужих программах ищу и нахожу что то новое.

Ну, если цель в этом, то другое дело :)

 

Операционку он ucos юзал, не в восторге, но работает. Я хотел бы scmRTOS, но это потом.

А не все ли равно? Особенно, если камень выбран с достаточным запасом.

К примеру, мои проекты уже давно лишены привязки к конкретной RTOS, менять ось - дело двух минут, хотя такой задачи изначально не ставилось.

Просто, свой код читать всегда проще и чем его больше в соотношении с чужим кодом, тем проще сопровождать такой проект. Имхо!

 

Кстати крутая программистка .... поэтому с ней расстались.
Логично :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, если цель в этом

проблема в собеседованиях. Давно были? Я не знаю, почему у проводящих их такие олимпиадные вопросы. По большому счету все что они спрашивают - никогда не надо. Причем язык С очень располагает к трюкам, оные я тоже не люблю. К счастью все это в прошлом, есть хорошая работа, где нужен результат, а не трюкачество

насчет двух минут смены горячитесь, у многих еще и менджер памяти свой, бывают тонкости

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проблема в собеседованиях. Давно были?

Всегда спрашиваю просто: наличие законченных проектов и куски кода оттуда для примера. Хотя бы это.

Остальные качества выясняются на испыт. сроке ))

 

насчет двух минут смены горячитесь

Да, погорячился :) На самом деле намного меньше: из списка доступных билдов нужно лишь выбрать нужный под нужную ОСь и пересобрать проект ))

Сам код не зависит от оси (простейшая "обертка").

Делалось с целью выяснить, какая ось шустрее и меньше жрет памяти.

Да и потом читать код с нормальными и более понятыми лично мне названиями функций-сервисов RTOS куда проще, чем разбираться со своим же кодом, вооружившись мануалом на ось )))

 

, у многих еще и менджер памяти свой

В известных целях не использую дин. память, хотя свой менеджер есть, на базе известного TLSF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ни разу не видел еще готовый проект с кучей доступных билдов под разные ядра. Даже hello world не видел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Я тоже. А зачем это вообще делать?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже. А зачем это вообще делать?

А как понять "из списка доступных билдов нужно лишь выбрать нужный под нужную ОСь и пересобрать проект"? Под ядро я имел в виду ось, ибо эмбеддерские это все же больше ядра просто, иногда с плюшками, не суть

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...