jenya7 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба прочитал интересную статью. решил поделиться. https://habrahabr.ru/company/inoventica/blog/275685/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvilWrecker 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба А где тут интересные моменты? Всегда считал данный ресурс местом сбора закомплексованных веб-дезигнеров разного пошиба,почему-то мнящих себя элитным сообществом(и разумеется таковым не являющимся), но весьма желающим быть генератором трендов в области языков/методологий программирования - почти что кузницей истин. Получается это у них подчеркнуто мерзко- в этом смысле по убогости с такими постами могут конкурировать разве что DIY проекты и печатные платы с гиктаймса. Особенно веселят персонажи предрекающие скорую гибель языкам группы C и тыкающие везде своими поделиями имеющими в названии слово java- ну а что с низ взять, с элитных веб-дезигнеров? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба Быдлохабра сейчас еще хуже стала, потому что интересные вещи, которые там когда-то можно было найти (как рисинку в ведре с дерьмом), перекочевали на какой-то "гиктаймс". А БХ теперь — тупо сборище поганой безмозглой вантузячьей школоты. По делу: С — он и в Африке С. И писать на нем точно так же, как 30 лет назад. Ничего не изменилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба прочитал интересную статью. решил поделиться. https://habrahabr.ru/company/inoventica/blog/275685/ Это компьютерный С-и , а встраиваемый С-и он совсем другой. Для него больше половины что там написано либо не действительно, либо все делается наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба ну лично для меня много интересных моментов которые я знал и раньше но тут о них заявляют категорическим образом. Мы НЕ делаем так: void test(uint8_t input) { uint32_t b; if (input > 3) { return; } b = input; } Вместо этого пишем следующим образом: void test(uint8_t input) { if (input > 3) { return; } uint32_t b = input; } или Классическая ошибка: struct thing { uint64_t index; uint32_t counter; }; struct thing localThing; void initThing(void) { memset(&localThing, 0, sizeof(localThing)); } Корректно: struct thing { uint64_t index; uint32_t counter; }; struct thing localThing = {0}; мелочь а приятно. буду править сорцы. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба Jenya7, не надо на этот бред внимания обращать, потому как даже фишки C99 не везде реализованы. Скажем, в том же sdcc объявлять переменные обязательно в самом начале функции. Да и вообще, как правильно заметили выше, в embedded очень многое отличается от "компутерного" С. И да, учитывая то, во что скатилась быдлохабра, категорически не рекомендую в этот рассадник вообще заходить. А то скатитесь до "одноклассников"… Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EvilWrecker 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба Быдлохабра сейчас еще хуже стала, потому что интересные вещи, которые там когда-то можно было найти (как рисинку в ведре с дерьмом), перекочевали на какой-то "гиктаймс". А БХ теперь — тупо сборище поганой безмозглой вантузячьей школоты. По делу: С — он и в Африке С. И писать на нем точно так же, как 30 лет назад. Ничего не изменилось. и Это компьютерный С-и , а встраиваемый С-и он совсем другой. Для него больше половины что там написано либо не действительно, либо все делается наоборот. Всецело поддерживаю- тамошний контингент всерьез считает что мир ограничен веб дизайном и клепанием игрушек на мобильные платформы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба мелочь а приятно. буду править сорцы. :) Бред полный. В первом примере бессмысленное говно в обеих случаях. Во втором инициализация через memset() и инициализация при объявлении локальной структуры ОТЛИЧАЮТСЯ. Для достижения одинакового результата должно быть struct thing localThing = {0,0}; "Советчики" :( Да, и объявление структуры без типа, как в "примере" это как и водка без пива - деньги на ветер :). Да, статью по ссылке не читал и не буду - хватило "примеров". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба Вот если совсем коротко - в 2016 году надо писать на C++. А в остальном - есть отдельные спорные моменты, но в целом со статьей можно согласиться. И да, практически все это применимо и в плюсах. Где там AlexandrY нашел "больше половины делается наоборот" я не знаю. Было бы интересно узнать, что же я делаю наоборот. Для достижения одинакового результата должно быть struct thing localThing = {0,0}; Забавно. В чем разница? Насколько помню, стандарт гарантирует инициализацию нулем неуказанных явно членов структуры. То есть достаточно было написать struct thing localThing = {};, а уж {0,0} - это совсем "масло масляное масляное" ;) Скажем, в том же sdcc объявлять переменные обязательно в самом начале функции.Забавно. Призывать не использовать возможности, появившиеся в языке 16 лет назад, потому что какой-то sdcc их до сих пор не умеет. Гораздо правильнее в этом случае завязывать с пиками и выкидывать этот sdcc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба Забавно. В чем разница? Насколько помню, стандарт гарантирует инициализацию нулем неуказанных явно членов структуры. Локально, как в этом примере, создаваемых переменных и структур тоже??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smalcom 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба прочитал интересную статью. решил поделиться. если хочется свеженького, то просто читайте новые возможности. к примеру отличия C99 и C11. Там уже много интересного и с правильными примерами. С правильными потому, что void initThing(void) { memset(&localThing, 0, sizeof(localThing)); } подразумевать, что это именно инициализация - неправильно. Это очистка. Для этого "программиста" - это может и "Классическая ошибка". uint32_t b = input; объявление в месте использования. это было в C++. Названо модненько lazy-чёто-там. Вся эта моднота бесит... Это просто объявление в месте использования, как "for(uint32_t i..." Решил быть не таким категоричным как zltigo и пошёл по ссылке. Первые абзацы Обычно вам подходит -O2, но иногда нужен -O3.Протестируйте оба варианта досвидос, хабр из моднявки превратился в помойку. собсно это обычный эволюционный путь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 117 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба Локально, как в этом примере, создаваемых переменных и структур тоже???А какая им разница? Если указано ={} то будут проинициализированны все элементы. Нулем. Даже неуказанные. Поэтому {0} уже избыточно, а {0, 0} - тем более. Я так себе понимаю. Или я не прав, и разница между ={0} и = {0, 0} все же есть? Тогда расскажите, какая. Хотя... видимо был не прав. В случае {} компилятор ругается на неинициализированное поле. А вот в случае {0} ругани нет и обнуляются все поля. Так в чем же отличие {0} от {0, 0}, "критики"? :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба А какая им разница? Если указано ={} то будут проинициализированны все элементы. Нулем. Даже неуказанные. Для начала IAR находящийся под руками такое не скушал. GCC съел; Поэтому {0} уже избыточно, а {0, 0} - тем более. Я так себе понимаю. Или я не прав, и разница между ={0} и = {0, 0} все же есть? Тогда расскажите, какая. По логике вещей, для локальной стуктуры, котрая в отличие от статической глобальной не инициализируется, инициализируются только те члены, которые указали. Остальные, как и положено - мусор. Попытался написать суперпрограммку для тестирования инициализации. Не удалось :). Если что-то простое, то инициализации просто нет НИ В КАКОМ ВАРИАНТЕ, но можно заставить подсовывать компилятор 0, как некое возвращаемое значение из структуры, но можно заставить и мусор! Причем очень просто - объявляем неинициализируя стуктуру. При попытке возвратить какой-либо элемент - получаем законную ругань. Теперь присваиваем ( через =, в не при обьявлении) любому элементу какое-либо значение, возвращаем ДРУГОЙ и получаем дивный эффект - функция превращается в один возврат. То есть возвращаемое значение абсолютно произвольно, что собственно и написали :) В общем дело темное, быстро не проверишь :(. На подкорку записал, может в выходные займусь изобретеним тестовой программки. P.S. Изобрел таки :) В общем ситуация такова. При инициализации хоть одного элемента стуктуры компилятор ТУПО вызывает тот-же memset() на всяю структуру. При попытке проинициализировать хоть один элемент НЕ нулем, получается memcpy() всей стуктуры из ROM. Но "неициализированные" элементы при этом таки да - нули. В общем вывод - если когда-то захочется проинициализировать только отдельные элементы локальной стуктуры, то нефиг пользоваться "автоматической" инициализацией - тупая она :( - жрет и ресурсы ROM и время. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба пожалуйста, не надо такого. особенно в разделе для начинающих. не надо портить тех, кому суждено стать эмбеддерами, - подобной шелухой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 25 января, 2016 Опубликовано 25 января, 2016 · Жалоба не надо портить тех, кому суждено стать эмбеддерами, - подобной шелухой. Вы не путаете эмбеддеров с Web программистами??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться