- 1
... *sizeof(uint32_t)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+118
... *sizeof(uint32_t)
Правильно. А то вдруг кто его переопределит.
guest 22.05.2014 23:25 # +1
3.14159265 22.05.2014 23:44 # +2
Действительно! И там случится оказия: размер uint32_t станет совсем другим!
guest 22.05.2014 23:55 # −3
chtulhu 23.05.2014 04:02 # +1
Soul_re@ver 23.05.2014 11:42 # +3
3.14159265 23.05.2014 14:37 # +3
Ну разве что кто-то ручками переопределит #define uint32_t uint64_t
Например Тарас в старых студиях ёбнет typedef int int32_t; на селероне-то всё нормально...
3.14159265 23.05.2014 14:33 # +1
Лол, и как ты умудряешься выдумывать подобную пургу?
tirinox 23.05.2014 12:43 # 0
bormand 23.05.2014 12:44 # 0
Сурово. Я бы не рискнул.
tirinox 23.05.2014 12:52 # 0
Dummy00001 24.05.2014 01:17 # 0
при портировании можно в лоб искать 32бит типы и смотреть надо ли их в 64бита конвертить или нет.
в случае сериализации/десереализации данных, это по моему опыту единственный работающий подход. иначе можно с легкостью сменой пары строк сломать протокол.
bormand 27.05.2014 09:38 # +4
defecate-plusplus 22.05.2014 23:51 # +2
читаешь код и видишь, это не какая-то четверка, это размер в байтах, все понятно
3.14159265 23.05.2014 01:39 # −1
А константы для кого придумали? Часто завожу просто для того чтоб код был понятней, ну и собрать числа-настройки в одном месте.
И чтоб изменить потом размер не придется по коду лазить и менять десятки этих типов. Они ведь не раз и не джва так написали.
guest 23.05.2014 02:06 # 0
bormand 23.05.2014 05:36 # +1
Вполне.
roman-kashitsyn 23.05.2014 08:30 # +1
tirinox 23.05.2014 12:53 # 0
roman-kashitsyn 23.05.2014 13:00 # 0
А вообще интересно:
tirinox 23.05.2014 13:06 # 0
roman-kashitsyn 23.05.2014 13:16 # 0
absolut 25.05.2014 21:20 # 0
По-моему, не по стандарту:
А нолик для можно получить.
bormand 25.05.2014 22:10 # 0
В крестах - нельзя.
Во-первых там нельзя писать безразмерные массивы int a[] в структуре (9.2-8: When an array is used as the type of a nonstatic member all dimensions shall be specified.).
Во-вторых там нельзя юзать массив нулевого размера int a[0] (8.3.4-1: If the constant-expression (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.).
В-третьих - даже sizeof() от пустой структуры вернет не менее 1 (5.3.3-2 The size of a most derived class shall be greater than zero).
То, что gcc без -pedantic не матерится на это - это гццпроблемы гццрасширение для совместимости с сишкой: warning: ISO C++ forbids zero-size array ‘a’
bormand 25.05.2014 22:19 # 0
Все там по стандарту:
3.9.1-9: The void type is an incomplete type that cannot be completed.
5.3.3-1: The sizeof operator shall not be applied to an expression that has function or incomplete type
absolut 26.05.2014 06:42 # 0
roman-kashitsyn 26.05.2014 09:52 # 0
myaut 23.05.2014 09:35 # +2
Ну sizeof(uint32_t) - и есть константа.
bormand 23.05.2014 09:58 # 0
typedef же, и менять придется только в одном месте.
wvxvw 23.05.2014 10:23 # 0
roman-kashitsyn 23.05.2014 10:30 # 0
wvxvw 23.05.2014 10:35 # 0
3.14159265 23.05.2014 14:32 # 0
Угу.
Dummy00001 24.05.2014 01:25 # +1
что не так уж и сложно.
в противном случае, если ты делаешь сетевой протокол, то typedef'ов у тебя будет такая куча, что в почти каждой строчке кода свой уникальный тип. а это намного хуже: тривиальная ошибка - неправильный тип - на код ревью ни разу не будет найдена.
а глупым способом, когда у тебя все uint32_t или uint64_t, намного легче заметить что у какого то поля неправильный тип.
bormand 24.05.2014 08:30 # 0
Если протокол или формат хранения - да, согласен, там из-за совместимости хуй кто поменяет типы. Да даже если и поменяют - это будет новая версия, а старую придется какое-то время поддерживать (т.е. код будет добавляться а не заменяться).
Если же размер типа не связан протоколом, а выбирается от балды - то лучше тайпдеф. Те же time_t, size_t и прочие они ведь неспроста тайпдефы.
bormand 24.05.2014 08:37 # +1
(Я не о протоколах и форматах, с которыми совсем другая история, а о переменных).
1024-- 24.05.2014 08:58 # 0
Доктор Стертор их заминусует.
Dummy00001 24.05.2014 13:41 # 0
Нет. Самое лучшее - это нативный тип.
Тайпдефы - только в случае если нужна совместимость с некрософтовским компилятором, потому что у них 64бит типы через жопу.
"P.S. В 2038 году страшная кара постигнет тех, кто писал int вместо time_t."
Это мелочи. На HP-UX time_t 64бит уже ХЕЗ как давно. Но. Редкая штатная функция времени не переваривает значения времени больше INT_MAX.
WGH 16.08.2014 01:42 # 0
Ну ладно PC, там 64 бита стремительно вытесняют 32, а вот что делать со встраиваемыми железками типа андроидов или домашних роутеров? Там 64 бита только-только начали появляться.
kegdan 16.08.2014 02:10 # 0
Опять проблема 2000x64?
bormand 16.08.2014 06:41 # 0
Дык не надо 64-битную платформу. Надо всего лишь 64-битный time_t.
WGH 16.08.2014 12:02 # +1
bormand 16.08.2014 12:07 # +3
Перейти на настоящую 64-битку будет всяко сложнее.
guest 23.05.2014 04:34 # +2
someone 23.05.2014 09:13 # −1
bormand 23.05.2014 09:28 # +3
Так что гость все правильно сказал. Другое дело, что такие платформы днем с огнем не найти. DSP какие-нибудь разве что...
Psionic 23.05.2014 11:01 # +1
anonimb84a2f6fd141 23.05.2014 11:22 # +3
Psionic 23.05.2014 12:45 # 0
guest 23.05.2014 16:59 # 0
guest 23.05.2014 14:36 # +2
Перед тем, как что-то "хоронить", нужно найти адекватную замену.
guest 23.05.2014 14:38 # −1
Psionic 23.05.2014 21:25 # 0
guest 23.05.2014 21:34 # 0
С проводника или с WMP.
bormand 23.05.2014 21:37 # 0
Дык IE 6 закопали же, вместе с операционкой, в которой он был в комплекте.
Олсо антимонопольщики евросоюза в свое время вытрясли с M$ версию без IE и WMP - Windows N.
someone 23.05.2014 11:51 # +2
guest 23.05.2014 14:38 # −1
guest 23.05.2014 18:17 # 0
tirinox 23.05.2014 12:58 # +1
bormand 23.05.2014 13:04 # +4
tirinox 23.05.2014 13:08 # +2
Тогда вот. В моем ярде - 4 фута!
Desktop 09.09.2023 00:28 # 0
guest6 09.09.2023 00:31 # 0
Dummy00001 24.05.2014 01:27 # +2
Да нет больше таких платформ...
И даже те которые все еще живы, в С симулируют 8ми битные байты. Потому что иначе почти 100% софта на них не скомпилишь.
guest 24.05.2014 20:40 # 0
guest 24.05.2014 20:41 # 0
Dummy00001 24.05.2014 21:34 # 0
для DSP есть проприетарные языки которые из далека (и часто с близи тоже) выглядят как С, но на самом деле есть всего лишь подмножества с проприетарными расширениями и специальными семантиками. (та же фигня с FPGA/friends.)
и про POSIX в этом случае говорить не стоит, потому что (хотя я и не исключаю этой возможности) на них как правило никто операционки не использует. там народ почти все ручками пишет, с проприетарными либами производителя DSP.
Bobik 27.05.2014 09:13 # 0
bormand 27.05.2014 09:29 # +1
absolut 27.05.2014 09:31 # 0
Soul_re@ver 27.05.2014 17:35 # 0
eth0 27.05.2014 19:54 # 0
xaionaro 28.06.2014 11:33 # 0
guest 28.06.2014 15:07 # −2
kegdan 28.06.2014 16:07 # +2
guest 28.06.2014 16:08 # +5
guest 28.06.2014 18:42 # +3
defecate-plusplus 28.06.2014 20:48 # +1
Goga 28.06.2014 21:00 # +2
roman-kashitsyn 18.08.2014 17:51 # 0
guest 16.08.2014 01:11 # 0
#define NULL rand()
inho 21.01.2018 14:26 # 0
Иначе заметят