Size: a a a

2020 April 25

RP

Roman Proskuryakov in pro.cxx
Max
Практика, в общем, одна: extern "C".
а как защититься от протекания С++ типов, к примеру, std::string?
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Статик ассертами обложить
источник

RP

Roman Proskuryakov in pro.cxx
static_assert(is_pod)?
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Roman Proskuryakov
а как защититься от протекания С++ типов, к примеру, std::string?
Оборачивать в экстерн целиком файл
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Roman Proskuryakov
static_assert(is_pod)?
is_trivial
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Но проверить, объявлен ли тип в экстерн блоке, вроде нельзя
источник

SE

Stanislav Ershov in pro.cxx
clang например
warning: 'foo' has C-linkage specified, but returns user-defined type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') which is incompatible with C [-Wreturn-type-c-linkage]
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Roman Proskuryakov
а как защититься от протекания С++ типов, к примеру, std::string?
Проверить в тестах, что все необходимое линкуется в си
источник

A

Andrey in pro.cxx
Artöm Bakri Al-Sarmini
Но проверить, объявлен ли тип в экстерн блоке, вроде нельзя
Можно переррузиться и получить факап
источник

RP

Roman Proskuryakov in pro.cxx
Stanislav Ershov
clang например
warning: 'foo' has C-linkage specified, but returns user-defined type 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >') which is incompatible with C [-Wreturn-type-c-linkage]
Действительно. Вернуть не получится. Но такой проверки на аргументы нет
источник

RP

Roman Proskuryakov in pro.cxx
спасибо. буду думать
источник

DF

Dollar Føølish in pro.cxx
Ещё про эксепшны на границе линкажа надо помнить
источник

DF

Dollar Føølish in pro.cxx
Ну и , поправьте если не актуально , секции _ctors / _dtors в бинарнике если компилятор их добавляет для статических конструкторов библиотечных переменных
источник

DF

Dollar Føølish in pro.cxx
static_assert наверное ещё надо на is_standart_layout помимо тривиала, так как в случае наличия приватных полей сишка может обосраться
источник

DF

Dollar Føølish in pro.cxx
Дело в том , что приватные поля не превращают класс в нетривиальный сами по себе
источник

ЮП

Юрий Першин in pro.cxx
Artöm Bakri Al-Sarmini
Эпичный костыль
Не для релиза, типа checked build
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Юрий Першин
Не для релиза, типа checked build
Смысл тогда в этом checked?
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Проверяться должен тот же код, что в прод идет
источник

ЮП

Юрий Першин in pro.cxx
Artöm Bakri Al-Sarmini
Смысл тогда в этом checked?
Собрать Checked Build, прогнать тесты, на этом месте не завалится - а другие AV вылезут
источник

ЮП

Юрий Першин in pro.cxx
Artöm Bakri Al-Sarmini
Проверяться должен тот же код, что в прод идет
Сборки Checked Build никогда не идут в прод, т.к. они тормозят безбожно. А в будущем, конечно, как минимум надо все строки терминировать нулями.
источник