The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск cppcheck 2.12, статического анализатора кода для языков C++ и С, opennews (??), 15-Сен-23, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


154. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +2 +/
Сообщение от Аноним (-), 17-Сен-23, 17:02 
> А существует ли книга (или серия статей) о best practices в языке
> C? Чтоб сразу писать более надежно, а не набивать шишки.

1. Embedded C coding standard - by M.Barr - можно укачать нашару насколько я помню.
2. Правила MISRA C. Сие легально на шару укачать низя, увы - проприетарщики. Но найти можно если нужно.
3. Почитать блог Cyan (автора LZ4) на тему этого самого. Там есть здравые идеи.
4. Забить в поискарь "antibug coding C" и получить бонусов из разных мест. Узнаете почему лучше сравнения делать вида if (10 == a) а не (if a == 10). Хинт: при опечатке if (a = 10) vs if (10 = a) это две большие разницы. Поэтому второй вариант - антибажный.
5. Посмотреть на практикующих гуру. Жесткую эмбедоску, линукскернел, все такое. Получите немало идей как не стрелять себе в пятки. От макро ARRAY_SIZE какой до авто-вычисления масок для битовых полей вместо того чтобы телепаться самому. Можно даже с проверкой что биты влезли в энную ширину.

Это может быть оверкиллом - но получив знание можно дальше уже по ситуации смотреть насколько оно имеет смысл в конкретном случае. Скажем правила MISRA довольно жесткие и не сказать что удобные. Но они имеют под собой определенный пойнт.

Ответить | Правка | Наверх | Cообщить модератору

162. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +1 +/
Сообщение от Аноним (147), 17-Сен-23, 19:53 
> 4. Забить в поискарь "antibug coding C" и получить бонусов из разных мест. Узнаете почему лучше сравнения делать вида if (10 == a) а не (if a == 10). Хинт: при опечатке if (a = 10) vs if (10 = a) это две большие разницы. Поэтому второй вариант - антибажный.

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

Ответить | Правка | Наверх | Cообщить модератору

169. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Аноним (-), 18-Сен-23, 01:56 
> И есть несколько книг, описывающие, что так делать нельзя, так как хуже
> воспринимается человеком.

Компилер при случае жестко рубанувший присвоение переменной a числу 10 как невозможное деяние - очень сильно перевешивает эти соображения. На мой вкус выглядит почти однофигственно на самом деле. А вот опечататься случайно в синтаксически-валидном виде - в вон том характерном стиле не получится уже принципиально. Потому и часть идей antibug.

> А код должен понимать человек. И написан он должен быть так, что бы его было
> легче воспринимать.

Как показала практика, одно другому не мешает - зато гасит баги из-за typo на подлете. И если вы хотите холодный душ, у хрустиков вот жто вот - антибажнее. Хоть я и не понимаю чем им := вместо let mut blablabla не зашел, но все же, до идеи явной демаркации присвоения они доперли.

> А такие ошибки уже давно не то что cppcheck'ами проверятся, а самими компиляторами.

Это в случае компилера как самый максимум варнинг а не еррор. И то зависит от. А анализатор это вообще страховочный трос, он не для того чтобы на нем постоянно отвисать.

А вот при присвоении числу переменной компилер это совершенно точно загасит. И логически условие вообще совсем никак от этого не меняется. А что справа и что слева в общем то чистая вкусовщина, на логику условия не влияет же.

Ответить | Правка | Наверх | Cообщить модератору

172. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Каптер (?), 18-Сен-23, 07:28 
>при опечатке if (a = 10) vs if (10 = a)

Никогда не понимал, почему в сишке разрешено присваивание в условии. Ведь это ещё один источник ошибок.

Ответить | Правка | К родителю #154 | Наверх | Cообщить модератору

177. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Аноним Максим (?), 18-Сен-23, 12:18 
if( a ) .. - не смущает же
и if( retcode=fn() ) .. тоже не смущает, и более того, всё очевидно

А вот if( a = b )   - уже нарушает читаемость, и чужого не работающего кода особенно, ибо возникает подозрение на опечатку.

Ну а if( a = const ) - это с вероятностью 96% - ляп.
В оставшихся случаях это последствия автогенерации кода, или замены #ifdef на константные if.

Ответить | Правка | Наверх | Cообщить модератору

179. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +1 +/
Сообщение от Каптер (?), 18-Сен-23, 16:27 
Честно говоря - смущает.
Ответить | Правка | Наверх | Cообщить модератору

180. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Аноним (-), 18-Сен-23, 17:01 
> и if( retcode=fn() ) .. тоже не смущает, и более того, всё очевидно

Вопрос: а зачем тут "retcode" вообще? if ( fn() ) было чем-то не круто? Или если retcode надо потом то зачем это в if () вообще было? Чтобы логику менее очевидной сделать?

Ответить | Правка | К родителю #177 | Наверх | Cообщить модератору

188. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Совершенно другой аноним (?), 19-Сен-23, 08:28 
например, для того, чтобы
if ((retcode = fn()) == 0)
{
}
else
if (retcode > 0)
{
}
else
{
}
Ответить | Правка | Наверх | Cообщить модератору

190. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Аноним (-), 21-Сен-23, 02:52 
Чувак, открой для себя тег [!code] ...  [!/code] (без восклицательных знаков, они тут для срыва парсинга этого тега). Хотя возможно ты получившимся контринтуитивным форматированием где мозг сломаешь какая ветка в каком случае выполняется специально вкатил и хотел подхайлайтить лишний раз почему так программить не стоит? :)
Ответить | Правка | Наверх | Cообщить модератору

189. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от voiceofreason (?), 21-Сен-23, 01:05 
Сэкономить одну строчку на кулхацкерских понтах
Ответить | Правка | К родителю #172 | Наверх | Cообщить модератору

191. "Выпуск cppcheck 2.12, статического анализатора кода для язык..."  +/
Сообщение от Аноним (-), 21-Сен-23, 02:54 
> Сэкономить одну строчку на кулхацкерских понтах

Как-то так в программах и появляются баги на ровном месте, а коллега неверно трактовавщий фрагмент кода - наломает и еще дров.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру