LINUX.ORG.RU
ФорумTalks

Сишная галера

 


0

4

Представьте, что вам надо запрограммировать девайс на языке С. Девайс проприетарный чуть более, чем полностью. Какая там ОС - неизвестно. Есть только куций API, с кастомными функциями для выделения памяти в куче и проч.

Вам надо в конечном счёте читать и разбирать блобы с входными параметрами писать выходной блоб. Причем, целые числа могут быть как little endian, так и big endian.

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

Вы:

  1. возьмёте опенсорсный sscanf, sprintf, ведь деды давно все эти проблемы решили; будете вручную трахаться с signed/unsigned и эндианнесс;

  2. возьмёте, и напишете свой кастомный sscanf, sprintf, с блекджеком и спецификаторами для эндианнес, и под конкретную задачу. Ведь вы же супер-кодер, один раз пару сложных процедур отладить - зато потом, как по автобану!

  3. sscanf, sprintf - для слабаков. Настоящий ковбой каждый раз пишет в буфер без вспомогательных процедур;

  4. позвоните маме, и скажете, что со следующей недели придется вам обедать у неё, а не на работе. Чтобы начинала варить борщи…

★★★★★

Последнее исправление: seiken (всего исправлений: 1)
Ответ на: комментарий от seiken

Ада для байтодрочинга не особо подходит

Запись с вариантом (Variant record) и спецификаторы представления (Representation Clauses), м?

va_list и ко там не было и не будет, по определению.

Конешшшно, это ж нетипобезопасные костыли.

Слишком строгая система типов

Она ващет твой друг, она там ващет чтоб помогать ;) А так, конешшно, моднее SPARK. Где гайки закручены еще сильнее и углы срезать еще сложнее.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от seiken

Вы хотите парсить блобы (бинарную информацию), которую вы хотите оформить в бинарный формат TLV (Type Length Value), но вы не указали, какой формат (контейнер) обеспечит вам достоверность бинарного формата TLV, т.к. сам по себе TLV не предполагает достоверизации информации, которую он транспортирует.

Т.к. TLV формат выбираете лично Вы, то вы же и обязаны убедиться, что нижележащий транспорт обеспечит вам достоверную передачу TLV формата и избавит вас от ошибочных ситуаций, связанных с не правильной интерпретацией TLV формата. Ведь вы же не хотите «в 4 часа утра включать ноут и удаленно перезагружать железку, получая от начальства нагоняй».

Vic
()
Ответ на: комментарий от Vic

не-не, я как раз не хочу никаких TLV. А за транспорт отвечает TCP, инфраструктура уже сделана за нас и до нас.

seiken ★★★★★
() автор топика
Ответ на: комментарий от slackwarrior

Конешшшно, это ж нетипобезопасные костыли.

ну так varargs и дрочка байтов на стеке - это киллер-фича сишки. Растовики завидуют, хотят, облизываются… но не могут.

seiken ★★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)