The OpenNET Project / Index page

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



"В языке системного программирования Hare реализована поддержка OpenBSD"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Доступны два режима работы форума: "Раскрыть нити" и "Свернуть нити".
. "В языке системного программирования Hare реализована поддерж..." +/
Сообщение от Аноним (-), 06-Дек-23, 16:12 
> О боже...
> integer overflow это не UB. Это прямое следствие лежащего под софтом железа

Вообще-то для именно signed int - таки UB. Хотя-бы потому что ... формат хранения signed int не специфицирован жестко и возможно несколько разных вариантов.

Что случится при wrap - "implementation defined" и зависит от формата хранения int. Полагаться на это нельзя. Хотя в C23, чтоли и где-то рядом в C++ оставили только один вариант, там еще есть какие-то шансы на defined.

Unsigned в этом лучше: там wrap явно прописан и это, таки, defined behavior.

Ах да, "int" - весьма растяжимое понятие. Ну вот например int 16 битов размером вполне валиден по стандартам. На некоторых платформах, типа ардуины, это даже можно и активировать, если горя хлебнуть хочется. Реально конечно большая часть софта дико лажанет если так сделать.

> и того, что Си не заявляет каких-то немыслимых абстракций. По такой
> логике, ошибки округления чисел с плавающей запятой в любом ЯП это UB.

У плавучки свои грабли. А в сях таки более чем достаточно UB - вплоть до того что если вы в 16-бит "int" загнали 65535 - то вообще ктулху его знает чему это будет на самом деле равно, с учетом сочетания факторов "формат хранения int" и "16 битное int".

...одна из причин по которым в C99 таки сделали более нормальные типы. К сожалению ума завершить что начали у комитета импотентов не хватило. Так что препроцессор оперирует чем-то другим, более близким к обычным типам. А считать он таки - может. Или например enum - да вообще удачи угадать какой у него эффективный тип. Он так специфицирован, что...

...и кстати если что-то typedef'нуть как enum и потом указать вот именно аргументом, имнено такой тип - компилеру класть что на вход дают значения котрых в этом enum и его typedef отродясь не было. И пользы от такого enum - сильно меньше чем могло бы быть. В плане зарубания багов.

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

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

Оглавление
В языке системного программирования Hare реализована поддержка OpenBSD, opennews, 04-Дек-23, 13:59  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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