The OpenNET Project / Index page

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



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

"Выпуск cppcheck 2.12, статического анализатора кода для языков C++ и С"  +/
Сообщение от opennews (??), 15-Сен-23, 21:59 
Вышла новая версия статического анализатора кода cppcheck 2.12, позволяющего выявлять различные классы ошибок в коде на языках Си и Си++, в том числе при использовании нестандартного синтаксиса, типичного для встраиваемых систем. Предоставляется коллекция плагинов, через которые обеспечена интеграция cppcheck  с различными системами разработки, непрерывной интеграции и тестирования, а также предоставлены такие возможности как проверка соответствия кода стилю оформления кода. Для разбора кода может применяться как собственный парсер, так и внешний парсер...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=59764

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

Оглавление

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

1. Сообщение от Аноним (1), 15-Сен-23, 21:59   +2 +/
Кто-то использовал? Мнение?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #9, #20, #32, #119

2. Сообщение от Аноним (2), 15-Сен-23, 22:16   –4 +/
Smatch на 2 головы полезнее.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #24

3. Сообщение от Хосе (?), 15-Сен-23, 22:23   +/
быстро развивается
Ответить | Правка | Наверх | Cообщить модератору

9. Сообщение от warlock66613 (ok), 15-Сен-23, 22:49   +11 +/
Мнение: любой статический анализатор лучше отсутствия статического анализатора.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #15

10. Сообщение от Аноним (15), 15-Сен-23, 22:57   –8 +/
Сначала слепили дврявый язык, а теперь думают как избавить код от ошибок 🤣
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #56

11. Сообщение от Аноним (11), 15-Сен-23, 23:03   +/
Именно поэтому Раст не нужен. Пока проблемы решаются через анализаторы кода, отдельное решение, не совместимое с прежней кодовой базой, не нужно.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #13, #42, #164

12. Сообщение от Аноним (13), 15-Сен-23, 23:22   +4 +/
Чем бы ни страдать, абы на язык с нормальным компилятором не переходить, в котором бОльшая часть ошибок ловится на этапе компиляции без всяких дополнительных телодвижений.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #14, #26, #51, #54, #192

13. Сообщение от Аноним (13), 15-Сен-23, 23:23   +3 +/
Не решаются. Количество ИЗВЕСТНЫХ уязвимостей не даст соврать. А сколько ещё НЕИЗВЕСТНЫХ....
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #136

14. Сообщение от Аноним (14), 15-Сен-23, 23:23   +3 +/
необучаемость, сэр.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

15. Сообщение от Аноним (15), 15-Сен-23, 23:29   –3 +/
Исправлять надо причину появление ошибок, а не вылавливать их как блох уже после того как они появились.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #17, #19, #21, #144

16. Сообщение от Аноним (16), 15-Сен-23, 23:30   +/
Лучше valgrind'а?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #27, #34

17. Сообщение от Аноним (17), 15-Сен-23, 23:51   +8 +/
Вот так и напиши в своём заявлении по собственному.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #18

18. Сообщение от Аноним (15), 15-Сен-23, 23:55   –12 +/
Я не пользуюсь дырявыми языками родом из 50-х.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #22, #28, #122, #134

19. Сообщение от Аноним (19), 15-Сен-23, 23:56   +1 +/
> Исправлять надо причину появление ошибок, а не вылавливать их как блох уже
> после того как они появились.

Ну да, нужно просто начать писать код без ошибок. Делов-то.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #73

20. Сообщение от _kpemail (ok), 16-Сен-23, 00:00   +1 +/
Если самосборный использовать, подавив лишниее сообщения, то вполне полезен, и не раздражает, а в стоковом виде среди спама заметить что то подозрительное мало реально.
А ключами не все управляемо, сразу весь тип проверок или включается или выключается.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #25

21. Сообщение от _kpemail (ok), 16-Сен-23, 00:02   +1 +/
Есть ещё мелкие опечатки, описки, которые компилятор в вполне скомпилирует, а анализатор может на подобное выдать сообщение.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

22. Сообщение от _kpemail (ok), 16-Сен-23, 00:05   +1 +/
Соответственно с микроконтроллерами не работаете, производительные модули не используете, про драйвера молчу.
Задачи то разные бывают.
Десктопное приложение и я на С++ добровольно писать не стану.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18

24. Сообщение от Аноним (24), 16-Сен-23, 00:53   +/
ты вот это васяноподелие пытаешься рекламировать?

https://github.com/error27/smatch

туда твой однострочный PR приняли? эйфория?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #29

25. Сообщение от Аноним (24), 16-Сен-23, 00:56   +1 +/
а грепнуть лишнее не вариант?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #30

26. Сообщение от Аноним (24), 16-Сен-23, 00:58   +/
столько не живут, сколько ты будешь свой говнокод переделывать под хотелки компилятора
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #31

27. Сообщение от Аноним (24), 16-Сен-23, 00:59   +/
одновременно юзаю valgrind, clang static analyzer и cppcheck
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16

28. Сообщение от Аноним (28), 16-Сен-23, 01:01   +3 +/
Electron гуру? JS сенсей? CSS будда?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18 Ответы: #46, #47

29. Сообщение от Аноним (2), 16-Сен-23, 01:06   –3 +/
Сам ты васяноподелие. Буквально. А сообщения там куда полезней были, цппчек ничего не видел.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #24

30. Сообщение от _kpemail (ok), 16-Сен-23, 01:20   +1 +/
> а грепнуть лишнее не вариант?

Можно, если любите длинные выражения писать, и нужно если ещё и любите их потом править.
И в награду будет ощутимое снижение компиляции.

А более по делу, есть еще атрибуты, на которые cppcheck забивает, и выдаёт спам. Но в этом случае вывод то нефильтуем никаким грипом. И можно или вырезать всё или оставить всё.
Туда же, в cppcheck,врезается и список исключений на имена, конструкции с которыми лучше игнорировать.
Ну, Си используется для микроконтроллеров, и тамошние трюки он в шоке.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25 Ответы: #33, #59

31. Сообщение от Аноним (31), 16-Сен-23, 01:51   +/
А под хотелки статического анализатора не нужно переделывать, да?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26 Ответы: #52, #61

32. Сообщение от Аноним (-), 16-Сен-23, 02:19   +3 +/
> Кто-то использовал? Мнение?

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

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

33. Сообщение от Аноним (-), 16-Сен-23, 02:22   +/
> Ну, Си используется для микроконтроллеров, и тамошние трюки он в шоке.

Фирмару надо нормально писать - тогда оки все. Я проверял - у меня практически без варнингов, кроме разве что bug-hunting mode получается. А за трюки в критичном софте - воздается. Жесткими фэйлами. У него bug-hunting - это exploratory mode когда можно получить сообщения которые не проблема, но могут и быть проблемой.

И если фильтровать вывод анализера - вы как раз баги и пролюбите. Код надо фиксить, а не...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #36, #66, #155

34. Сообщение от Аноним (-), 16-Сен-23, 02:25   +1 +/
> Лучше valgrind'а?

Он как бы не замена оному. Есть статический анализ, а есть анализ в рантайме. Valgrind о втором. Он рантайм-анализатор проблем и его больше смысла сравнивать с asan/ubsan чтоли. Которые так то тоже не замена статическому анализу а рантайм-дополнение к нему.

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

35. Сообщение от Аноним (15), 16-Сен-23, 02:36   +/
Чего только не придумают лишь бы не писать без ошибок...
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #37

36. Сообщение от _kpemail (ok), 16-Сен-23, 03:09   +/
> Фирмару надо нормально писать
> у меня практически без варнингов

Я не Ардуины, а о более реальных крупных проектах для микроконтроллеров.
От компилятора то варнингов и нет, они или хинты есть от cppcheck, и часто грубо не по делу, то есть спам.

> И если фильтровать вывод анализера - вы как раз баги и пролюбите.

Не думае те же Вы, что cppcheck святее Папы Римского? Нет конечно. Но дополнительную проверку делает.
И особенно полезен, когда часть кода писал не сам.

> Код надо фиксить, а не...

Да ну? Атрибуты убрать? В embedded это даёт заметный сразу эффект ;)
Или аппаратные фичи не использовать, потому что анализатор о них понятия не имеет?

А на обычное десктопное ПО анализатор в идеале ругаться не должен, ибо на подобных исходниках и тестировался.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #81

37. Сообщение от burjui (ok), 16-Сен-23, 03:25   –1 +/
Действительно, ведь всего-то нужно начать с

int main(void)
{
    return 0;
}

а дальше — согласно стандарту. Изи.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #45, #62

42. Сообщение от _kpemail (ok), 16-Сен-23, 04:45   +/
> Именно поэтому Раст не нужен. Пока проблемы решаются через анализаторы кода,

Rust - не даёт прострелить ногу, пока не используется unsafe. Ну, по крайней мере, концептуально должен не дать.

> решение, не совместимое с прежней кодовой базой, не нужно.

А чисто исходники на Си, и тем более C++, но написанные под разные их стандарты или реалиции компиляторов, архитектуры, типа переносимы без их правки. А уж проявление граблей при переносе и вовсе непредсказуемо, в том числе анализаторами.

Предположим в очередной стандарт Си добавят фичи из Rust, так на несовместимость исходников и слова не скажут, ибо не хочешь - не используй.
А тогда с Rust что не так? Там претензии не столько к менее читаемому синтаксису, сколько к системе сборки и зависимостям.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #43, #48, #55

43. Сообщение от Аноним (43), 16-Сен-23, 08:01   +1 +/
std::unique_ptr.
С разморозкой, появился в 2011 году
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42 Ответы: #44, #60, #126

44. Сообщение от Аноним (44), 16-Сен-23, 09:04   +/
угу,
а куча проектов все еще на более древних версиях
и переходить они не собираются, ибо костылей и ub там столько, что проще забить
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43 Ответы: #53

45. Сообщение от Аноним (44), 16-Сен-23, 09:05   +/
я бы еще добавил каст к void*, ну так, чисто чтобы держать планку
и чтобы следующие пограммисты не расслаблялись)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37

46. Сообщение от Аноним (-), 16-Сен-23, 09:17   +1 +/
Ом мани падме хум
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28

47. Сообщение от Первая буква (?), 16-Сен-23, 09:18   +5 +/
Микрософт Ворд печатник.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28

48. Сообщение от Аноним (-), 16-Сен-23, 09:22   +2 +/
Я как практикующий сишник скажу, что в реальности не всё так, как ты обрисовал. Ты курнул?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42

51. Сообщение от Anonim (??), 16-Сен-23, 10:36   +/
Ну Herb Sutter уже пишет новый cpp2.. Очнулись таки
https://github.com/hsutter/cppfront
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

52. Сообщение от Аноним (56), 16-Сен-23, 10:36   +/
Как только он начинает выпендриваться на него кладется болт и хотела идёт в исключения.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31 Ответы: #75, #111

53. Сообщение от Аноним (56), 16-Сен-23, 10:37   +1 +/
Раст переписать в принципе невозможно. Давай ещё аргументов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44

54. Сообщение от Аноним (54), 16-Сен-23, 10:37   +/
Страуструп тут недавно выступал и совершенно точно подметил, что те, кто думает, что корректность программы исчерпывается правильной работой с памятью, не понимают примерно ничего в этой жизни https://www.youtube.com/watch?v=eo-4ZSLn3jc
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #65, #77

55. Сообщение от Аноним (56), 16-Сен-23, 10:39   –1 +/
Ты всегда используешь ансей в расте, зачем тогда Раст. Ни один растовик пока что на этот вопрос не смог внятно ответить.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #42 Ответы: #64, #67, #70

56. Сообщение от Аноним (56), 16-Сен-23, 10:40   +3 +/
Другие написали точно такой же дырявый язык и пытаются всем внушить что он не дырявый. 🤣
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #74

59. Сообщение от Аноним (24), 16-Сен-23, 13:12   +/
зачем мне писать и править длинные выражения, что такое выражени, что такое снижение компиляции?

короче, я этот набор слов с рандомными запятыми не распарсил

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #117

60. Сообщение от Аноним (24), 16-Сен-23, 13:13   +1 +/
это конкретно std::unique_ptr появился тогда, но никто не мешал до него написать свой
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43 Ответы: #72

61. Сообщение от Аноним (24), 16-Сен-23, 13:15   +/
да, не надо, потому что он указывает на косяки, а не на шизофазию головного мозга "разработчиков" раста и их видение реальности. эталонное шашечки и ехать
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

62. Сообщение от Аноним (24), 16-Сен-23, 13:17   +1 +/
согласно теории ошибок либо у тебя в программе нет ошибок, либо она никому не нужна
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #63

63. Сообщение от Аноним (24), 16-Сен-23, 13:17   +/
*есть ошибки
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #62

64. Сообщение от warlock66613 (ok), 16-Сен-23, 13:27   +/
Rust всегда Rust, что safe, что unsafe: правила одни и те же и там и там. В unsafe блоках ты берёшь часть проверок на себя, только и всего. В safe части ты можешь расслабиться, в unsafe приходится напрячься, но unsafe блоки пишутся максимально просто — так, чтобы без особых трудностей следовать правилам, а запутанные вещи делаются в safe части.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55

65. Сообщение от warlock66613 (ok), 16-Сен-23, 13:32   +/
Страуструп не понимает что UB — это не "некорректность". Суть не в том чтобы писать без ошибок, смысл в том, чтобы писать программы хотя бы синтаксически корректные, то есть без UB.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54 Ответы: #68

66. Сообщение от penetrator (?), 16-Сен-23, 14:11   +/
когда у тебя на 1 ошибку 10000 бесполезных советов, то такой статический анализатор это геморой и явно НЕ дейли инструмент
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #82

67. Сообщение от Аноним (19), 16-Сен-23, 14:18   +2 +/
> Ты всегда используешь ансей в расте, зачем тогда Раст.

Ты всегда пишешь чушь?

> Ни один растовик пока что на этот вопрос не смог внятно ответить.

Внятно - это в рамках персонально твоей, альтернативной логики и реальности?

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

68. Сообщение от Аноним (54), 16-Сен-23, 14:32   +/
Пионеры не в состоянии понять, что UB - это следствие разнородности аппаратных платформ, с которыми C++ должен уметь эффективно работать непосредственно. И когда их любимый пионерский язычок натыкается на целочисленное переполнение в релизной сборке, он ведет себя точно так же неопределенно, как и C++.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #65 Ответы: #69, #76, #98, #112

69. Сообщение от Анонин (?), 16-Сен-23, 15:58   +/
> пионерский язычок натыкается на целочисленное переполнение в релизной сборке, он ведет себя точно так же неопределенно

А вот и нет. Что для signed int, что для unsigned int выполняется two’s complement wrapping.
Т.е. нет никакого UB, потому что результат выполнения будет однозначный, в отличие от плюсов и сишки.
https://github.com/rust-lang/rfcs/pull/560

Читайте маны, а не плодите мифы!

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #68 Ответы: #71

70. Сообщение от Анонимусс (?), 16-Сен-23, 16:01   +1 +/
> Ни один растовик пока что на этот вопрос не смог внятно ответить.

Может ты просто не в состоянии осилить ответ?))

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55 Ответы: #79

71. Сообщение от Аноним (54), 16-Сен-23, 16:03   +/
Вы либо крестик снимите, либо трусы наденьте: если вы пишете, что у вас нет runtime и overhead, то не пишите, что у вас нет UB, и наоборот - если у вас нет UB, тогда у вас есть runtime и/или overhead, которые обеспечивают поведение согласно вашим хотелкам на платформах, у которых поведение другое.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #69 Ответы: #83

72. Сообщение от Анонми (?), 16-Сен-23, 16:40   +/
Мелало отсутствие мув-семантики.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #60

73. Сообщение от Аноним (73), 16-Сен-23, 17:00   +2 +/
Или использовать известный безопасный язык со строгим конпелятором.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #132

74. Сообщение от Аноним (73), 16-Сен-23, 17:02   +1 +/
Пруфы дырок будут или только газификации луж
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #56 Ответы: #135

75. Сообщение от Аноним (73), 16-Сен-23, 17:04   +/
Звучит надёжно и очень безопасно
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #52 Ответы: #167

76. Сообщение от Анонми (?), 16-Сен-23, 17:06   +1 +/
> Пионеры не в состоянии понять, что UB - это следствие разнородности аппаратных платформ, с которыми C++ должен уметь эффективно работать непосредственно

Извини, но нет: концепция UB не добавляет C/C++ возможность поддержки каких-то дополнительных платформ, и уж точно она не про эффективность. Согласно стандарту, наличие UB в программе делает ее некорректной на абсолютно любой платформе.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #68 Ответы: #80

77. Сообщение от Анонми (?), 16-Сен-23, 17:18   +/
> Страуструп тут недавно выступал и совершенно точно подметил, что те, кто думает, что корректность программы исчерпывается правильной работой с памятью, не понимают примерно ничего в этой жизни

Да, да... А то, что более 70% всех уязвимостей в софте вызваны именно неправильной работой с памятью в C и C++ он тактично промолчал?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54 Ответы: #90, #92

79. Сообщение от Аноним (-), 16-Сен-23, 17:31   –1 +/
Ты в танке? Он же ясно сказал, что на этот вопрос растаманы не могут дать внятного ответа.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #70

80. Сообщение от Аноним (-), 16-Сен-23, 17:35   +/
Да он не про "Концепцию Неопределённого поведения" говорит.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #76

81. Сообщение от Аноним (-), 16-Сен-23, 17:44   +1 +/
> Я не Ардуины, а о более реальных крупных проектах для микроконтроллеров.

У ардуины код крупный как раз - 100500 либ и черт его знает что там про них чекер говорит. А то что вы развели г@вна в проекте - мало ли, может слава Тойоты вам покоя не дает.

> От компилятора то варнингов и нет, они или хинты есть от cppcheck,
> и часто грубо не по делу, то есть спам.

Если кодить используя приемы antibug coding и придерживаться идей близких к MISRA, тогда большая часть варнингов от сабжа вполне полезные. Да и компилеры вы небось юзаете столь же разухабисто. Хотя-бы -Wconversion ваш супер-код переживает без варнингов? Компилера, ага. Если мало - дайте все ключи из бложика Cyan хотя-бы.

>> И если фильтровать вывод анализера - вы как раз баги и пролюбите.
> Не думае те же Вы, что cppcheck святее Папы Римского? Нет конечно.

Видел я что эти святоши вытворяют, и заманался чинить уже. Так что нет, аргумент не котируется.

> Но дополнительную проверку делает. И особенно полезен, когда часть кода писал не сам.

Да и самого себя проверить лишний раз совершенно не лишне. Си такая штука что клювом клацать не стоит. Особенно если уже подустал и проч - можно и протупить случайно.

>> Код надо фиксить, а не...
> Да ну? Атрибуты убрать? В embedded это даёт заметный сразу эффект ;)

Что-то не помню чтобы сабж сильно пиндел на атрибуты. Ну и да, совсем убрать их конечно не получится.

> Или аппаратные фичи не использовать, потому что анализатор о них понятия не имеет?

А в каком месте анализатор вообще на вот именно аппаратные фичи сами по себе возбухает?

> А на обычное десктопное ПО анализатор в идеале ругаться не должен, ибо
> на подобных исходниках и тестировался.

Да он и на эмбедовке довольно прилично работает. Если не выделываться с трюкачеством, за что воздается. Например тем что соседний кодер трюкачество не понял или понял неверно.

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

82. Сообщение от Аноним (-), 16-Сен-23, 17:48   –1 +/
> когда у тебя на 1 ошибку 10000 бесполезных советов, то такой статический
> анализатор это геморой и явно НЕ дейли инструмент

Или как вариант - д@рьмовый кодер, возомнивший себя самой умной клавой на глобусе. С сишкой это почему-то очень часто случается. И потом у таких в коде куча CVE и просто багов. А когда суперкод начинают тыкать палочкой - вооооон там майнтайнер XFS с такого счастья сбежал в панике, за такими кодерами разгребать устал как раз.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #66 Ответы: #89

83. Сообщение от Анонми (?), 16-Сен-23, 17:51   +2 +/
> если вы пишете, что у вас нет runtime и overhead, то не пишите, что у вас нет UB

Oh, my sweet summer child... Наличие UB не дает магического прироста скорости. Оно лишь дает право выстрелить себе в ногу, написав некорректный по определению код, а компилятору - право закрыть на это глаза.

Именно поэтому людям и приходиться использовать с C и C++ статические анализаторы: чтобы выловить свиней, заботливо подложенных создателями и комитетом C/C++ в свои убогие дырявые языки.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #71 Ответы: #84

84. Сообщение от Аноним (24), 16-Сен-23, 17:57   –1 +/
неофиты неисправимы...

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #83 Ответы: #86, #96

85. Сообщение от Аноним (85), 16-Сен-23, 18:06   +/
Кто-то хоть раз с этим анализатором РЕАЛЬНЫЙ баг находил? вот который на самом деле происходит, а не так, "теоретически, если потом кто-то поменяет код".

По мне эти улититы анализа - пустая трата времени на то чтобы читать их высеры

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

86. Сообщение от Анонимусс (?), 16-Сен-23, 18:17   +6 +/
Боже... вот из-за таких как ты, нынешний софт такой багованый...

Открываем ISO/IEC 14882:2020, пункт 3.28 undefined behavior

"Permissible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message)."

Сам осилишь или перевести?
Наверное не нужно - ты же такой умный, знаешь как работает комп!
Можешь определить какое UB формальное, а какое нет)))

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

"Because correct C++ programs are free of undefined behavior, compilers may produce unexpected results when a program that actually has UB is compiled with optimization enabled"

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #84 Ответы: #87

87. Сообщение от Аноним (54), 16-Сен-23, 18:26   +/
Ну так по этому определению твой любимый пионерский язычок, в котором якобы нет UB, может либо запаниковать, либо не запаниковать при переполнении. Всё в зависимости от того, с какими опциями будет вызван компилятор. Ещё раз: это не про C++, а про твой язычок, в котором, якобы, нет UB.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #86 Ответы: #88, #108

88. Сообщение от Анонимусс (?), 16-Сен-23, 18:38   +1 +/
Нет, речь не про раст, и даже не про с++.
А про подход, что "ты просто берёшь и делаешь UB в угоду производительности, и ничего в этом криминального нет"
Тебе в с++ стандарте черным по белому написали чем это грозит. Но ты все равно считаешь, что умнее разрабов стандарта и такой быдл0к0д имеет право на жизнь!

> может либо запаниковать, либо не запаниковать при переполнении

Facepalm... Дело не в том, что оно запаникует или нет. А в том, что поведение integer overflow описано и зафиксировано. А оно уже может быть любым, главное однозначным.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #87 Ответы: #91

89. Сообщение от Анонин (?), 16-Сен-23, 18:40   –1 +/
> С сишкой это почему-то очень часто случается.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #82 Ответы: #109

90. Сообщение от Аноним (54), 16-Сен-23, 18:49   +/
Нет, ровно об этом и говорил: do not use low-level unsafe features - hide them in containers or libraries.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #77 Ответы: #97

91. Сообщение от Аноним (54), 16-Сен-23, 19:02   –1 +/
Поведение integer overflow описано и зафиксировано и в C++ ТОЖЕ! Только описано и зафиксировано оно не для компилятора, а для конкретной платформы. И на конкретной платформе конкретное поведение является полностью определенным. Далее кому надо - берут и используют библиотеку, предоставляющую нужный баланс гарантий и производительности, e.g. https://github.com/dcleblanc/SafeInt/blob/master/helpfile.md
Благо проблем с расширением C++ библиотеками, в отличие от известно пионерского языка, почти нет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #88 Ответы: #94, #95

92. Сообщение от неАнон (?), 16-Сен-23, 19:03   +/
ну не может же он сказать "мое детище это кусок кала, мы забивали на безопасность, логику и здравый смысл"
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #77

94. Сообщение от Анонимусс (?), 16-Сен-23, 19:13   +1 +/
> и в C++ ТОЖЕ!

А вот теперь пруфы для signed integer overflow хотя бы для пары платформ (ссылки на доки подойдут).
И не нужно говорить что это другое, в комменте выше я писал про signed.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #91 Ответы: #99

95. Сообщение от Анонми (?), 16-Сен-23, 19:34   +1 +/
> Поведение integer overflow описано и зафиксировано и в C++ ТОЖЕ! Только описано и зафиксировано оно не для компилятора, а для конкретной платформы.

Нет, дружок, не зафиксированно. В стандарте C++ черным по белму написано, что signed overflow это UB. На любой платформе. Иначе это было бы не UB, а implementation-defined behavior.

> И на конкретной платформе конкретное поведение является полностью определенным.

Не, не является. UB - это UB на любой платформе.

В общем, как всегда на опеннете: некомпетентный в C и C++ "эксперт" понятия не имеет о проблемах этих языков, но во всю воюет против Раста.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #91 Ответы: #100

96. Сообщение от Анонми (?), 16-Сен-23, 19:38   +3 +/
> ты просто берёшь и делаешь UB

Ахаха! Чел, ты это серьезно?

Вот и все, что нужно знать о противниках Раста. Зато уже ведь всех окрестил неофитами и пионерами...

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

97. Сообщение от Анонми (?), 16-Сен-23, 19:52   +/
> hide them

Ага, уязвимости же от этого магическим образом исчезают.  Это типа как мусор заметать под ковер. Как жаль, что всякие дурачки, изабретающие и внедряющие расты, не знают об этом простом и эффективном способе решения 70% проблем.

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

98. Сообщение от warlock66613 (ok), 16-Сен-23, 20:02   +/
Вы явно путаете undefined behavior и implementation-defined behavior. Это _очень_ разные вещи.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #68 Ответы: #101

99. Сообщение от Аноним (54), 16-Сен-23, 20:06   +/
Пожалуйста: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html
А теперь расскажи чем пионерский язычок в этом плане лучше, если он может либо генерировать панику, либо не генерировать панику - всё в зависимости от опций компилятора.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #94

100. Сообщение от Аноним (54), 16-Сен-23, 20:10   +/
Ещё раз: UB в этом контексте означает то же поведение, что и в пионерском язычке. В зависимости от опций компилятора.

When signed integer arithmetic operation overflows (the result does not fit in the result type), the behavior is undefined: it may wrap around according to the rules of the representation (typically 2's complement), it may trap on some platforms or due to compiler options (e.g. -ftrapv in GCC and Clang), or may be completely optimized out by the compiler.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #95 Ответы: #103

101. Сообщение от Аноним (54), 16-Сен-23, 20:19   +/
Нет, это вы не понимаете, что аппаратная платформа отличается от компилятора, для которого и применяется термин "implementation-defined", и что для аппаратной платформы поведение может быть четко определено даже если оно не определено в стандарте языка.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #98 Ответы: #105, #123

103. Сообщение от Анонми (?), 16-Сен-23, 20:32   +/
> UB в этом контексте означает то же поведение,

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

Извини, чел, но чтобы понять, зачем существует Раст, нужно знать о проблемах C/C++ - а ты в этой теме не в зуб ногой.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #100 Ответы: #104

104. Сообщение от Аноним (54), 16-Сен-23, 20:40   +/
Я на C++ деньги зарабатываю, а ты пионер, который пересказывает проповеди евангелистов. Если тебе ссылки на документацию выше не говорят о возможности задания строгого определенного поведения в GCC и Clang (а также в любых других комбинациях компиляторов и платформ), то ты просто не понимаешь, что там написано. UB в C++ означает только то, что стандарт не определяет поведение в данной конкретной ситуации. Это не значит, что поведение будет обязательно неопределено для конкретного компилятора и платформы, а ровно наоборот - просто оно может отличаться между платформами и компиляторами.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #103 Ответы: #110

105. Сообщение от Анонми (?), 16-Сен-23, 20:44   +/
Ну как бы да, это и есть implementation-defined behavior. Но вы его путаете с undefined behavior, которое при любом раскладе undefined.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #101 Ответы: #128, #131

106. Сообщение от Govein (?), 16-Сен-23, 20:46   –1 +/
> статического анализатора кода для языков C++ и С

А почему не С и С++? Так же намного привычнее.

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

108. Сообщение от Аноним (19), 16-Сен-23, 21:17   +1 +/
> Ну так по этому определению твой любимый пионерский язычок, в котором якобы
> нет UB, может либо запаниковать, либо не запаниковать при переполнении.

Не совсем. Это ты можешь либо эт-самое в лужу, либо просто в сторону "растоманов" - в зависимости от настроения и желаний левой пятки. А тут
https://doc.rust-lang.org/std/primitive.u32.html#method.wrap...
> Wrapping (modular) addition. Computes self + rhs, wrapping around at the boundary of the type.

все, как хочет погроммист, вне зависимости от опций и языковых расширений компилятора


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

109. Сообщение от Аноним (-), 16-Сен-23, 21:27   +/
>> С сишкой это почему-то очень часто случается.
> О, так это их стандартное поведение. Они же типа ылитка))
> А потом начинается или "это неправильный сишник, настоящий бы так никогда не
> написали", или "не, ну все так ошибаются, а что вы хотели??"

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #89 Ответы: #133

110. Сообщение от Анонимусс (?), 16-Сен-23, 21:28   +1 +/
> UB в C++ означает только то, что стандарт не определяет поведение в данной конкретной ситуации.

Это не так. Ты сейчас говоришь про 3.29 unspecified behavior
"behavior, for a well-formed program construct and correct data, that depends on the implementation"
Вот оно зависит он конкретной реализации. При этом код остается валидным и на это поведение можно завязываться.

А UB делает код невалидным. В след. версии компилятора они мог вообще дропнуть UB кусок во время оптимизации и будут абсолютно правы. То что в компиляторы добавили флаги-костыли для затыкания UB - это просто от безысходности - количество быдл0кодеров, которые кладут болт на стандарты превышало все разумные пределы, а кодовая база была уже написана. И это вряд ли изменится, потому что исправив это - получат кучу нытиков "дисят лет работало, а типеря сламалася!!11"

> Я на C++ деньги зарабатываю

Да я и не сомневался)) А таких как ты много...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #104 Ответы: #113

111. Сообщение от Аноним (-), 16-Сен-23, 21:30   +1 +/
> Как только он начинает выпендриваться на него кладется болт и хотела идёт в исключения.

А потом вы такой садитесь в тоету с непатченым ECU и наслаждаетесь острыми ощущениями... правда, сможете ли вы ими поделиться с окружающими - вот это как повезет уже. Как показали натурные эксперименты, везло не всем.

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

112. Сообщение от Аноним (-), 16-Сен-23, 21:37   +/
> Пионеры не в состоянии понять, что UB - это следствие разнородности аппаратных
> платформ, с которыми C++ должен уметь эффективно работать непосредственно.

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

Поэтому код для "int" и "uint16_t" де факто получается как правило одинаковый. Однако есть разница: если вы удумаете назначить что-то явно левое, типа 100500 в uint16_t - вы таки можете варнинг поиметь, а вон там оно спокойно вкатится - чего доброго заюзается как индекс массива какого, на самом деле это опечаточка вышла - но по чужой памяти покатались знатно. И спасибо если не послали ее в сеть или куда там и еще более спасибо если не вкатили это из сети ничего не подозревавшей программе фиг знает куда вообще.

А скажите - вы и правда хотели вот именно "int" как индекс массива? Пока единственный профит который я вижу - возможность влепить отрицательные значения без особого намека на варнинги.

Более того - это даже до олдов дошло. До тех которые нормальные. Читать Торвальдса в пуллреквестах bcachefs до просветления. Там где про bit fields vs enum. И это все - вот как раз поэтому. Там Торвальдс мастеркласс по антибагу до кучи дал. Его то жизнь заставила. А кентушка створил какую-то хрень, запостив pull с явным багом и довольно крутым. А старого лиса вот не проведешь - баги за версту чует.

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

113. Сообщение от Аноним (54), 16-Сен-23, 22:23   +/
Я говорю так, как оно есть, но я пытаюсь что-то донести до пионера-фанатика, который не понимает ни русского, ни адглийского, ни элементарного здравого смысла, а несёт какую-то религиозную пургу, чтобы возвысить свой пионерский язычок и приписать другим языкам недостатки, которых у них нет. По факту у тебя просто одна реализация компилятора и нет никакого стандарта, так что на стандарты ты будешь ссылаться тогда, когда он появится и ты поймешь для чего стандарты нужны.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #110 Ответы: #115, #124

114. Сообщение от хрю (?), 16-Сен-23, 22:48   +/
ну, наверно, потому что  это cpp check, а не c check +).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #106

115. Сообщение от Аноним (31), 16-Сен-23, 23:17   +/
> приписать другим языкам недостатки, которых у них нет

Забавно было бы услышать, почему тогда 70% всех уязвимостей - это именно работа с памятью в C и C++. Действительно: если в C++ нет недостатков, то выходит, что Rust могли придумать лишь дураки-пионэры, которые об этом не знали, так ведь?

> на стандарты ты будешь ссылаться тогда, когда он появится и ты поймешь для чего стандарты нужны.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #113 Ответы: #116

116. Сообщение от Аноним (54), 16-Сен-23, 23:51   +/
Дорогой пионер, стандартов C++ уже 6 штук и на подходе 7-й. И различаются некоторые из них между собой не меньше, чем 2 разных языка. А ты пишешь про какую-то работу "с памятью в C и C++". C++ успешно эволюционирует и проблемы в нём успешно устраняются, чего не скажешь о пионерском язычке, код браузерного движка на котором оказалось легче выкинуть и переписать с нуля (https://www.opennet.me/openforum/vsluhforumID3/131470.html#52 ), нежели пытаться исправить - ещё до выхода первого стандарта язычка. И это при том, что сам язычок изначально разрабатывался компанией Mozilla именно для этого браузерного движка. А на C++ код поддерживается и развивается десятилетиями, благодаря чему ты здесь можешь писать всякую ерунду.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #115 Ответы: #127

117. Сообщение от C00l_ni66a (ok), 17-Сен-23, 04:16   +/
Если у вас снижена компиляция, то нужно всего лишь раз в день принимать советское, копеечное...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #59

119. Сообщение от Мда (?), 17-Сен-23, 08:53   +2 +/
Из бесплатных - лучший. Но полное г. по сравнению с платными.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

120. Сообщение от Мда (?), 17-Сен-23, 08:56   +2 +/
Да, например случайная копипаста недоправленная, т.е. что-то типа (точно не помню):
memcpy(x, y, sizeof(y));
memcpy(z, k, sizeof(y));
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #85 Ответы: #153

122. Сообщение от Аноним (-), 17-Сен-23, 10:08   +/
> Я не пользуюсь дырявыми языками родом из 50-х.

Гордый пользователь редокса и фуксии на десктопе? %)

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

123. Сообщение от Советский инженерemail (?), 17-Сен-23, 10:12   +/
Бла бла бла UB, бла бла бла implementation-defined ...

Так и что там с корректностью?
Один спрыгивает с дырявости на корректность, другой с корректности на неопределенное поведение. Что значит по сути предьяв и сказать нечего. Остаётся только извивается.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #101 Ответы: #141, #143

124. Сообщение от Анонимусс (?), 17-Сен-23, 10:20   +2 +/
Дорогой непионер, мы все уже давно поняли твою позицию и что ты из себя представляешь.
И про быдлокодинг, и про "а так сойдет", и про болт на стандарты.
Спасибо, мы достаточно видели таких и их кода... Можешь не продолжать позориться.
В дальнейший диалоге смысла не вижу. До скорой встречи в очередной CVE в дыряшке.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #113 Ответы: #129, #130

125. Сообщение от iPony129412 (?), 17-Сен-23, 10:21   +1 +/
хорошая штука, до VPS 🦄 конечно не дотягивает, но всё же.
Ответить | Правка | Наверх | Cообщить модератору

126. Сообщение от Советский инженерemail (?), 17-Сен-23, 10:22   +1 +/
И как тебе этот юникпоинтер не позволит изменить значение из разных потоков?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43

127. Сообщение от Советский инженерemail (?), 17-Сен-23, 10:32   +1 +/
И все так счастливы поддерживать этот прекрасный язычок что, как ты и сам заметил, одни изобрели Раст, другие карбон и го. От скуки наверное?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #116

128. Сообщение от Аноним (128), 17-Сен-23, 11:00   +/
> Ну как бы да, это и есть implementation-defined behavior. Но вы его
> путаете с undefined behavior, которое при любом раскладе undefined.

Из одного может получиться другое. Скажем формат signed - implementation defined. Откуда вытекает что signed overflow - UB, потому что может быть что так что сяк. В зависимости от формата хранения.

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

129. Сообщение от Аноним (54), 17-Сен-23, 11:11   +/
Не забудь принять стандарт ISO пионерского язычка и сменить "дыряшку" на реактос с сервоприводом прежде чем следующий коммент строчить, любитель стандартов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #124 Ответы: #139

130. Сообщение от Аноним (147), 17-Сен-23, 11:13   +/
> и про болт на стандарты

Забавно слышать от фанатов rust'а.

У которых нет стандарта.

И есть 1.2 реализации.

Причем начало второй реализации полностью без проверок.

И спокойно можно писать на этой реализации rust программу. Стандарта то нет.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #124 Ответы: #138

131. Сообщение от Аноним (54), 17-Сен-23, 11:22   +/
Я ничего не путаю. Это ты не понимаешь, что есть стандарт C++ для десятков компиляторов и сотен аппаратных платформ, в котором есть свои области определения, а есть компиляторы и платформы, которые эти области определения расширяют. То, что что-то не определено по стандарту ISO не означает, что оно не определено по спецификации GCC/Clang и/или AMD. А ты это сравниваешь с пионерским язычком, у которого вообще никакого стандарта нет и есть полторы реализации компиляторов. С точки зрения стандартов весь rust и любая программа на нём - UB.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #105 Ответы: #159

132. Сообщение от Аноним (134), 17-Сен-23, 11:51   +/
То есть Crab.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #73

133. Сообщение от Аноним (134), 17-Сен-23, 11:56   +/
Устал - гоу на пенсию, нытик-неосилятор. Пылинку в чужом коде все горазды заметить, покажи свой код.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #109 Ответы: #152

134. Сообщение от Аноним (134), 17-Сен-23, 11:58   +/
>Я не пользуюсь дырявыми языками родом из 50-х.

Напиши это в резюме и выдели жирным.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18 Ответы: #186

135. Сообщение от Аноним (134), 17-Сен-23, 12:03   +/
>Сначала слепили дврявый язык, а теперь думают как избавить код от ошибок

Ждем пруфы дырок.

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

136. Сообщение от Аноним (134), 17-Сен-23, 12:07   +1 +/
То же самое применимо к новому языку. А сколько у него еще НЕНАПИСАНЫХ ошибок...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13

138. Сообщение от Аноним (158), 17-Сен-23, 12:24   +1 +/
ха, чем такие стандарты в которых UB в перемешку с implementation-defined, котоые по сути, не гарантирут елементарного! Как сложить два числа без UB !!!

уж лучше жить на RFC и не смешить людей такими стандартами.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #130 Ответы: #145

139. Сообщение от Аноним (158), 17-Сен-23, 12:30   +/
скомпиляй ядро без расширений GNU для С, и тогда что-то рассказывай, любитель стандартов.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #129 Ответы: #147

141. Сообщение от Аноним (31), 17-Сен-23, 12:44   +/
> Так и что там с корректностью?
> Что значит по сути предьяв и сказать нечего. Остаётся только извивается.

С корректностью чего именно? По сути каких именно предьяв?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #123 Ответы: #142

142. Сообщение от Аноним (158), 17-Сен-23, 12:58   +/
>С корректностью чего именно?

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

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

143. Сообщение от Аноним (31), 17-Сен-23, 13:03   +/
> Бла бла бла UB, бла бла бла implementation-defined ...
> Так и что там с корректностью?

Чел, при наличии UB в коде и сам код, и получающиеся из него бинари некорректны по определению. Какое "бла бла бла"?

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

144. Сообщение от Аноним (144), 17-Сен-23, 13:35   +/
> Исправлять надо причину появление ошибок

Так можно и в протворечие с резолюции 260 (III) запросто войти.

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

145. Сообщение от Аноним (147), 17-Сен-23, 13:37   +/
> уж лучше жить на RFC и не смешить людей такими стандартами.

Во! Во! Это ниша пионерских язычков.

Вот так и живите дальше.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #138 Ответы: #148

147. Сообщение от Аноним (147), 17-Сен-23, 14:30   +/
> чтоб не попользоваться нестандартными расширениями компилятора

Вы думаете это случайно так? По недомыслию разработчиков стандартов? Вы то умнее их и так бы не сделали?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #139 Ответы: #157, #184

148. Сообщение от Аноним (31), 17-Сен-23, 14:41   +/
> Вот так и живите дальше.

А мы будем и дальше "просто брать, и делать UB", да? Ох и цирк...

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #145 Ответы: #161

149. Сообщение от Каптер (?), 17-Сен-23, 15:12   +/
А существует ли книга (или серия статей) о best practices в языке C? Чтоб сразу писать более надежно, а не набивать шишки.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #154, #168

152. Сообщение от Аноним (-), 17-Сен-23, 16:41   +1 +/
> Устал - гоу на пенсию, нытик-неосилятор. Пылинку в чужом коде все горазды

Ну если buffer overrun при определенных аргументах, или факап в математике выдающей левак - пылинка, я уж боюсь себе представить что у вас крупнее. Полное стирание флехи с фирмварью чтоли, без предупреждений? Сигейты 7200.11 одобряют.

> заметить, покажи свой код.

Я его регулярно сабжу и показываю. И не имею особых проблем с ним :). А вы можете покупать сигейты 7200.11 и ездить на непатченой тойоте, там как раз пылинок - есть.

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

153. Сообщение от Аноним (-), 17-Сен-23, 16:53   +/
> Да, например случайная копипаста недоправленная, т.е. что-то типа (точно не помню):
> memcpy(x, y, sizeof(y));
> memcpy(z, k, sizeof(y));

Можно рубануть в стиле антибаг. Наример:
#define MEMCOPY(x, y)  memcpy((x), (y), sizeof(y)).

...а теперь попробуйте так облажаться в MEMCOPY() вообще? Да, caveats у этого решения увы, тоже есть :). А еще в идеале нехило бы проверить что sizeof(x) == sizeof(y). Иначе можно жизнерадостно вынести все что за x из памяти и глазом не моргнуть если x меньше y по размеру.

Эти олдовые функции мало того что с дурным прототипом так еще злее опасной бритвы. В два счета снимут скальп случайно при бритье, если заказать что-то не то. И вот идете вы такой весь перемотаный бинтами на горле, черепухе, "ничего себе к цирюльнику сходил"

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

154. Сообщение от Аноним (-), 17-Сен-23, 17:02   +2 +/
> А существует ли книга (или серия статей) о 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ообщить модератору
Родитель: #149 Ответы: #162, #172

155. Сообщение от т1110втфатф1110 (?), 17-Сен-23, 17:08   +1 +/
Сразу видно человека который фирмварь никогда не писал, иначе знал бы что hardware сишники, кроме костылей и велосипедов никогда ничего не пишут, потому что те кто разрабатывают железо, делают его через задницу, и вот эту задницу нужно подтирать софтом.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #158

157. Сообщение от Аноним (158), 17-Сен-23, 18:02   +/
я не знаю по какой причине стандарт такой как есть, но вот хвастатся таким стандартом я бы не стал.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #147 Ответы: #160

158. Сообщение от Аноним (158), 17-Сен-23, 18:11   +/
💯 пудов.

особенно такое проявляется конда и "платку сам разводил и фирмварю сам писал"

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

159. Сообщение от Аноним (158), 17-Сен-23, 18:37   +/
ага, ага.
стандарт есть, но мягкий 🤣

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #131 Ответы: #163

160. Сообщение от Аноним (147), 17-Сен-23, 19:44   +/
> я не знаю по какой причине стандарт такой как есть, но вот хвастатся таким стандартом я бы не стал.

То есть, "не читал, но осуждаю".

Он есть. В отличии от.

И он рассчитан на развитие железа и его изменения.

В отличии от некоторых.

Где здесь причина не гордиться им?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #157 Ответы: #171

161. Сообщение от Аноним (147), 17-Сен-23, 19:46   +/
Это чувство самосохранения.

Не заниматься однодневками.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #148 Ответы: #174

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #154 Ответы: #169

163. Сообщение от Аноним (147), 17-Сен-23, 20:36   –1 +/
Ты имеешь ввиду мозилу, которая получив опыт, свалила с rust'а?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #159 Ответы: #175, #176

164. Сообщение от Мда (?), 17-Сен-23, 20:52   +/
Раст, по факту, это один большой стат. анализатор.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11

167. Сообщение от Аноним (167), 17-Сен-23, 23:26   +/
Уже ходишь в бронетрусах?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #75

168. Сообщение от Аноним (168), 17-Сен-23, 23:36   +/
https://gist.github.com/Earnestly/7c903f481ff9d29a3dd1
Вот здесь список проявлений неопределённого поведения.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #149

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

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

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

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

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

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

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

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

171. Сообщение от Советский инженер (?), 18-Сен-23, 04:47   +/
Не мычи, ядро по стандарту собрал или нет?
Если нет, то пошол вон.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #160

172. Сообщение от Каптер (?), 18-Сен-23, 07:28   +/
>при опечатке if (a = 10) vs if (10 = a)

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #154 Ответы: #177, #189

174. Сообщение от Советский инженер (?), 18-Сен-23, 08:07   +/
С таким подходом тебе надо безопасненько на Яве писать , или вообще на коболе.

Ты не достоин быть частью семьи где отцы основатели сделали язык под проект.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #161 Ответы: #181

175. Сообщение от Аноним (158), 18-Сен-23, 10:27   +/
мозила свалила с раста только в альтернативной реальности местных икспертов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #163

176. Сообщение от Аноним (31), 18-Сен-23, 10:37   +/
> Ты имеешь ввиду мозилу, которая получив опыт, свалила с rust'а?

Ты нагло лжешь.

https://wiki.mozilla.org/Oxidation#Rust_Components
https://4e6.github.io/firefox-lang-stats/

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #163 Ответы: #178

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #172 Ответы: #179, #180

178. Сообщение от Серб (ok), 18-Сен-23, 14:09   +/
Так, интереса ради, что на нем сейчас пишут в firefox?

Что подсмотреть за интересными примерами?

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

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

180. Сообщение от Аноним (-), 18-Сен-23, 17:01   +/
> и if( retcode=fn() ) .. тоже не смущает, и более того, всё очевидно

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #177 Ответы: #188

181. Сообщение от Серб (ok), 18-Сен-23, 17:16   +/
Скопипащу с форума одного сайта. Это то, что очевидно, но как-то многие делают вид, что вообще не понимают, о чем речь, почему-то.


> Что такое вообще код?
> Это реализация,выражение какой-то идеи, записанное в виде набора инструкций. Вопрос же про сопровождение, т.е реализация должна жить максимально долго с минимумом усилий.
> Что может этому помешать? Изменение среды выполнения: ОС, железо, библиотеки.
> Как снизить влияние среды?
> Варианта всего два: либо свой рантайм либо абстрагирование на уровне кода - чтобы везде и всегда собиралось.
> Первый вариант это то что реализуют Java и .NET, второй это Си.

Копипасту немного порезал. Там дальше rust ругает.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #174 Ответы: #182

182. Сообщение от Аноним (158), 18-Сен-23, 18:34   +2 +/
>> ... чтобы везде и всегда собиралось.

блииин, а я всегда думал надо чтоб собранное работало ....
а оно вот как, собралось и ладненько

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #181 Ответы: #183

183. Сообщение от Серб (ok), 18-Сен-23, 18:40   +/
> блииин, а я всегда думал надо чтоб собранное работало ....
> а оно вот как, собралось и ладненько

Зачем попросту ерничать?

Понятно же, что и работать должно.

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

184. Сообщение от Аноним (184), 18-Сен-23, 20:04   +/
Это вендорлок.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #147

186. Сообщение от Аноним (15), 18-Сен-23, 20:54   +/
Всегда так делаю.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #134

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

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

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

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

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

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

192. Сообщение от BeLord (ok), 22-Сен-23, 11:44   +/
Ну и где у нас нормальные компиляторы?-))
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12


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

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




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

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