zHz00 Untitled

воскресенье, 20 июня 2021
01:15 Ещё один способ выстрелить себе в ногу в Си
Было написано что-то вроде такого:

b=2;
c=3;
d=4;

Я решил в начало добавить присваивание для a. Но начало строчки я написал, а значение дописать забыл. Получилось:

a=
b=2;
c=3;
d=4;

И это спокойно скомпилировалось и заработало (правда, неправильно). А почему? Потому что Си поддерживает цепочечные присваивания. И где у программиста новая строка -- ему плевать. Он воспринял этот текст следующим образом:

a=b=2;
c=3;
d=4;

@темы: Программирование, Фейлы

URL
когда училась в школе читала в "искусство кино"...
Пришла на сессию в университет, а оказывается мы там нико...
Картинка одного из последних дней Шумная, безумная ночь...
Моррисон как-то писал Откуда желание смерти? - Желание ид...
Ши:Ха! Нет, Сью у нас точно Накагава Норико - из любой с...
Корейцы молодцы!!! буду за них болеть!

20.06.2021 в 01:24

20.06.2021 в 01:24
Но ведь для си есть чудесные статические анализаторы кода, которые такое ловят на раз. Ты почему не пользуешься!?
URL

20.06.2021 в 01:34

20.06.2021 в 01:34
Xersareeth, ещё руки не дошли. Что посоветуешь?
URL

20.06.2021 в 10:34

20.06.2021 в 10:34
zHz00, Не могу ничего посоветовать, я ж не пишу на си. Но если судить по статьям на хабре, pvs-studio хорош.
URL

20.06.2021 в 17:55

20.06.2021 в 17:55
Я думаю, ты и сам догадываешься, что я скажу.

Но я, к сожалению, не скажу, потому что ни GCC 10, ни Clang 11 не выдали тут никаких предупреждений (-Wall -Wextra). Даже -Wmisleading-indentation это не ловит! Отвратительно.

Тестировал на вот таком коде:



-- Minoru
URL

20.06.2021 в 17:55

20.06.2021 в 17:55
Как же очуменно Дайри отображает блоки кода…

-- Minoru
URL

20.06.2021 в 17:56

20.06.2021 в 17:56
Ой, пока разбирался с тегом code, потерял точку с запятой после «d=4».

-- Minoru
URL
Добавить комментарий

Расширенная форма

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail