Evgenii
нормальный код не сегфолтит инфа сотка
Александр
Вопрос на засыпку - как по сети принимать/передавать POD типы сразу целым куском без UB?
Anonymous
думаю, что никак
Anonymous
там же это, выравнивание, не?
Александр
Предполагая, что я слежу за выравниванием и размерами типов
Александр
Т.е. в памяти идентично всё
Matwey
Тогда сделай union
Matwey
Из структуры и буфера
Cuno
А где в таком случае UB?
Matwey
В буфер читай пиши
Cuno
При касте в char*?
Anonymous
ну reinterpret_cast<uint8_t*>(&pod) и используй, как массив с размером структуры
Александр
Это UB всё
Александр
Я так и юзал всегда. То юнион, то каст
Anonymous
ну дк других способов нет
Александр
А сейчас задался вопросом - это ж UB
Anonymous
UB UB UB UB UB, работает везде, где надо
Matwey
А где там UB? char не подпадает под strict aliasing
Александр
А где там UB? char не подпадает под strict aliasing
Вот если это правда, то спасибо, это меня и интересовало
Anonymous
в supamegapro.cxx сразу уж
Anonymous
со своими "я люблю сегфолты (нет)"
Anatoly
А сейчас задался вопросом - это ж UB
UB это запись в один мембер union-а, а чтение из другого, а кастовать к char* ты имеешь полное право.
Александр
Соответственно A a; s.read((char*)&a, sizeof(a)); Тоже валиден?
Александр
Будем считать, что да
Anatoly
валиден
Pavel
а что насчет выравнивания полей в структуре?
Pavel
если будет с одной стороны 32 битная с другой 64 битная то точно всё уедет
Pavel
attribute packed и прочее где?
Anatoly
Для таких структур устанавливается выравнивание явно. А вообще при передаче POD объектов по сети слишком много допущений должно быть выполнено: одинаковое выравнивание, одинаковая разрядность платформы, одинаковый порядок следования байт (endianness)
Anatoly
здесь самопал бы я не городил, а взял бы https://developers.google.com/protocol-buffers/
Александр
Pavel
я не про типы а про выравнивание их в структуре
Александр
вот endianness - это важно, да
Александр
самопал иногда нужно городить, когда на "той" стороне уже придумали свой бинарный протокол и не реагируют на иной
Александр
например, когда пилишь эмулятор к какой-нибудь игрушке (даже мобильной)
Anatoly
ну, тогда ничего не попишешь, тогда самопал
Александр
всем спасибо за объяснения
Pavel
https://godbolt.org/g/zQDJXz
Pavel
слоупок.жпг
Александр
да это понятно. packed и #pragma никто не отменял
Mikhail
Всем привет! Кто нибудь знает, можно определить глобально в проекте макрос с параметрами? Чтобы не нужно было инклудить файл где он объявлен
Evgenii
нет
Mikhail
блин, жаль :(
Anatoly
блин, жаль :(
очень плохой язык
Anatoly
с параметрами
Mikhail
это разве с параметрами?
Berkus
https://godbolt.org/g/TtCysv не благодари
Anonymous
Выглядит страшно
Berkus
Всем привет! Кто нибудь знает, можно определить глобально в проекте макрос с параметрами? Чтобы не нужно было инклудить файл где он объявлен
можно, но надо прописывать аргументы для компилятора в билдсистеме, то есть он будет инклюдить неявно за тебя - можно, но ОЧЕНЬ ПЛОХАЯ ИДЕЯ
Berkus
Выглядит страшно
зато порядок аргументов не перепутаешь!
Berkus
ну если не вариант то ответ НЕТ
Stanislav
ну если не вариант то ответ НЕТ
а какже "компилер пропатчить"
Berkus
ну если им билд систему не пропатчить, то...
Stanislav
если мейкфайл то какой нибудь CXXFLAGS=-D_MY_UBER_MACROS
Berkus
там можно компилеру указать пре-инклюдить хедер, а в хедер напихать что угодно
Ned
Парни. Кто-то собирал llvm вручную?
Ned
Ну сам компилил, а не пребилд бинари юзал
Evgenii
а, ну я
Berkus
Парни. Кто-то собирал llvm вручную?
я тебе даже скрипт дал который это делает, так что я
Ned
Блин точно
Ned
Собрался таки собрать себе кросскомпиль для D
Berkus
все что ему надо - это сказать какие коммиты брать для сборки, остальное он сам. можно тупо master вбить тогда из мастера соберет
Berkus
можешь туда ldc сразу затолкать в дерево, если он плагином собирается
Berkus
хотя подозреваю что нет
Ned
Да, я читал его
Ned
Нет, плагином не собирается: (
Berkus
ну тады ой
Berkus
главное не забудь -j12 или больше ему задать если ты мейкфайлы генеришь
Berkus
а то неделю будет собираться
Berkus
ну или просто взять ninja
Ned
А сам себя он откомпилить может? Есть уже предустановленный шланг и ллвм. Он точно подцепит сам себя, а не гцц?
Berkus
что в CC/CXX укажешь то и подцепит
Berkus
CMAKE_C_COMPILER есть такая штука
Ned
Со времён сборки lfs очень бешусь с параметров конфигурации