реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> как писать на С в 2016 году
Jenya7
сообщение Jan 25 2016, 15:06
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



прочитал интересную статью. решил поделиться.
https://habrahabr.ru/company/inoventica/blog/275685/
Go to the top of the page
 
+Quote Post
EvilWrecker
сообщение Jan 25 2016, 15:25
Сообщение #2


ядовитый комментатор
******

Группа: Свой
Сообщений: 2 765
Регистрация: 25-06-11
Пользователь №: 65 887



А где тут интересные моменты? Всегда считал данный ресурс местом сбора закомплексованных веб-дезигнеров разного пошиба,почему-то мнящих себя элитным сообществом(и разумеется таковым не являющимся), но весьма желающим быть генератором трендов в области языков/методологий программирования - почти что кузницей истин. Получается это у них подчеркнуто мерзко- в этом смысле по убогости с такими постами могут конкурировать разве что DIY проекты и печатные платы с гиктаймса. Особенно веселят персонажи предрекающие скорую гибель языкам группы C и тыкающие везде своими поделиями имеющими в названии слово java- ну а что с низ взять, с элитных веб-дезигнеров? biggrin.gif
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jan 25 2016, 15:35
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Быдлохабра сейчас еще хуже стала, потому что интересные вещи, которые там когда-то можно было найти (как рисинку в ведре с дерьмом), перекочевали на какой-то "гиктаймс". А БХ теперь — тупо сборище поганой безмозглой вантузячьей школоты.
По делу: С — он и в Африке С. И писать на нем точно так же, как 30 лет назад. Ничего не изменилось.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Jan 25 2016, 15:41
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Jenya7 @ Jan 25 2016, 17:06) *
прочитал интересную статью. решил поделиться.
https://habrahabr.ru/company/inoventica/blog/275685/


Это компьютерный С-и , а встраиваемый С-и он совсем другой.
Для него больше половины что там написано либо не действительно, либо все делается наоборот.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 25 2016, 15:42
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



ну лично для меня много интересных моментов которые я знал и раньше но тут о них заявляют категорическим образом.
Код
Мы НЕ делаем так:
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};

мелочь а приятно. буду править сорцы. sm.gif
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jan 25 2016, 15:53
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Jenya7, не надо на этот бред внимания обращать, потому как даже фишки C99 не везде реализованы. Скажем, в том же sdcc объявлять переменные обязательно в самом начале функции.
Да и вообще, как правильно заметили выше, в embedded очень многое отличается от "компутерного" С.
И да, учитывая то, во что скатилась быдлохабра, категорически не рекомендую в этот рассадник вообще заходить. А то скатитесь до "одноклассников"…
Go to the top of the page
 
+Quote Post
EvilWrecker
сообщение Jan 25 2016, 15:54
Сообщение #7


ядовитый комментатор
******

Группа: Свой
Сообщений: 2 765
Регистрация: 25-06-11
Пользователь №: 65 887



Цитата
Быдлохабра сейчас еще хуже стала, потому что интересные вещи, которые там когда-то можно было найти (как рисинку в ведре с дерьмом), перекочевали на какой-то "гиктаймс". А БХ теперь — тупо сборище поганой безмозглой вантузячьей школоты.
По делу: С — он и в Африке С. И писать на нем точно так же, как 30 лет назад. Ничего не изменилось.


и

Цитата
Это компьютерный С-и , а встраиваемый С-и он совсем другой.
Для него больше половины что там написано либо не действительно, либо все делается наоборот.


Всецело поддерживаю- тамошний контингент всерьез считает что мир ограничен веб дизайном и клепанием игрушек на мобильные платформы.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 25 2016, 15:55
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Jenya7 @ Jan 25 2016, 17:42) *
мелочь а приятно. буду править сорцы. sm.gif

Бред полный. В первом примере бессмысленное говно в обеих случаях. Во втором инициализация через memset() и инициализация при объявлении локальной структуры ОТЛИЧАЮТСЯ.
Для достижения одинакового результата должно быть
struct thing localThing = {0,0};
"Советчики" sad.gif
Да, и объявление структуры без типа, как в "примере" это как и водка без пива - деньги на ветер sm.gif.
Да, статью по ссылке не читал и не буду - хватило "примеров".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 25 2016, 16:17
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Вот если совсем коротко - в 2016 году надо писать на C++.

А в остальном - есть отдельные спорные моменты, но в целом со статьей можно согласиться. И да, практически все это применимо и в плюсах. Где там AlexandrY нашел "больше половины делается наоборот" я не знаю. Было бы интересно узнать, что же я делаю наоборот.

Цитата(zltigo @ Jan 25 2016, 17:55) *
Для достижения одинакового результата должно быть
struct thing localThing = {0,0};
Забавно. В чем разница? Насколько помню, стандарт гарантирует инициализацию нулем неуказанных явно членов структуры. То есть достаточно было написать struct thing localThing = {};, а уж {0,0} - это совсем "масло масляное масляное" wink.gif


Цитата(Эдди @ Jan 25 2016, 17:53) *
Скажем, в том же sdcc объявлять переменные обязательно в самом начале функции.
Забавно. Призывать не использовать возможности, появившиеся в языке 16 лет назад, потому что какой-то sdcc их до сих пор не умеет. Гораздо правильнее в этом случае завязывать с пиками и выкидывать этот sdcc.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 25 2016, 16:17
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Сергей Борщ @ Jan 25 2016, 18:14) *
Забавно. В чем разница? Насколько помню, стандарт гарантирует инициализацию нулем неуказанных явно членов структуры.

Локально, как в этом примере, создаваемых переменных и структур тоже???



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
smalcom
сообщение Jan 25 2016, 16:18
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



Цитата
прочитал интересную статью. решил поделиться.

если хочется свеженького, то просто читайте новые возможности. к примеру отличия C99 и C11. Там уже много интересного и с правильными примерами.
С правильными потому, что
Цитата
void initThing(void) {
memset(&localThing, 0, sizeof(localThing));
}

подразумевать, что это именно инициализация - неправильно. Это очистка. Для этого "программиста" - это может и "Классическая ошибка".

Цитата
uint32_t b = input;

объявление в месте использования. это было в C++. Названо модненько lazy-чёто-там. Вся эта моднота бесит... Это просто объявление в месте использования, как "for(uint32_t i..."

Решил быть не таким категоричным как zltigo и пошёл по ссылке. Первые абзацы
Цитата
Обычно вам подходит -O2, но иногда нужен -O3.Протестируйте оба варианта

досвидос, хабр из моднявки превратился в помойку. собсно это обычный эволюционный путь.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 25 2016, 16:22
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(zltigo @ Jan 25 2016, 18:17) *
Локально, как в этом примере, создаваемых переменных и структур тоже???
А какая им разница? Если указано ={} то будут проинициализированны все элементы. Нулем. Даже неуказанные. Поэтому {0} уже избыточно, а {0, 0} - тем более. Я так себе понимаю. Или я не прав, и разница между ={0} и = {0, 0} все же есть? Тогда расскажите, какая.

Хотя... видимо был не прав. В случае {} компилятор ругается на неинициализированное поле. А вот в случае {0} ругани нет и обнуляются все поля. Так в чем же отличие {0} от {0, 0}, "критики"? sad.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 25 2016, 17:01
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Сергей Борщ @ Jan 25 2016, 18:22) *
А какая им разница? Если указано ={} то будут проинициализированны все элементы. Нулем. Даже неуказанные.

Для начала IAR находящийся под руками такое не скушал. GCC съел;
QUOTE
Поэтому {0} уже избыточно, а {0, 0} - тем более. Я так себе понимаю. Или я не прав, и разница между ={0} и = {0, 0} все же есть? Тогда расскажите, какая.

По логике вещей, для локальной стуктуры, котрая в отличие от статической глобальной не инициализируется, инициализируются только те члены, которые указали. Остальные, как и положено - мусор.
Попытался написать суперпрограммку для тестирования инициализации. Не удалось sm.gif. Если что-то простое, то инициализации просто нет НИ В КАКОМ ВАРИАНТЕ, но можно заставить подсовывать компилятор 0, как некое возвращаемое значение из структуры, но можно заставить и мусор! Причем очень просто - объявляем неинициализируя стуктуру. При попытке возвратить какой-либо элемент - получаем законную ругань. Теперь присваиваем ( через =, в не при обьявлении) любому элементу какое-либо значение, возвращаем ДРУГОЙ и получаем дивный эффект - функция превращается в один возврат. То есть возвращаемое значение абсолютно произвольно, что собственно и написали sm.gif
В общем дело темное, быстро не проверишь sad.gif. На подкорку записал, может в выходные займусь изобретеним тестовой программки.

P.S.
Изобрел таки sm.gif
В общем ситуация такова. При инициализации хоть одного элемента стуктуры компилятор ТУПО вызывает тот-же memset() на всяю структуру. При попытке проинициализировать хоть один элемент НЕ нулем, получается memcpy() всей стуктуры из ROM. Но "неициализированные" элементы при этом таки да - нули.
В общем вывод - если когда-то захочется проинициализировать только отдельные элементы локальной стуктуры, то нефиг пользоваться "автоматической" инициализацией - тупая она sad.gif - жрет и ресурсы ROM и время.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
krux
сообщение Jan 25 2016, 17:10
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



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


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 25 2016, 18:16
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (krux @ Jan 25 2016, 19:10) *
не надо портить тех, кому суждено стать эмбеддерами, - подобной шелухой.

Вы не путаете эмбеддеров с Web программистами???


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 18:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01771 секунд с 7
ELECTRONIX ©2004-2016