Я называю 3-й стороны библиотеки C99 из Modern C ++. API содержит структуру, которая заканчивается гибким массивом. Чтобы выделить структуру на стеке, я думаю, что мне нужен байтовый буфер, а затем поднять его в структуру.
#include
#include
// 3rd-part C99 API
extern "C" {
struct Foo {
int length;
int array[];
};
void do_something(struct Foo*);
}
// My C++ code
auto bar() {
auto length = 4;
std::byte buffer[sizeof(Foo) + length * sizeof(int)];
auto &foo = *reinterpret_cast(buffer); // ← Is this UB?
foo.length = length;
do_something(&foo); // ← Is this UB?
std::println("Result: {}", foo.array[3]); // ← Is this UB?
}
Редактировать: я компилируюсь с -std = gnu ++ 23 так>
Я называю 3-й стороны библиотеки C99 из Modern C ++. API содержит структуру, которая заканчивается гибким массивом. Чтобы выделить структуру на стеке, я думаю, что мне нужен байтовый буфер, а затем поднять его в структуру.[code]#include #include
// 3rd-part C99 API extern "C" { struct Foo { int length; int array[]; };
void do_something(struct Foo*); }
// My C++ code auto bar() { auto length = 4; std::byte buffer[sizeof(Foo) + length * sizeof(int)]; auto &foo = *reinterpret_cast(buffer); // ← Is this UB? foo.length = length; do_something(&foo); // ← Is this UB? std::println("Result: {}", foo.array[3]); // ← Is this UB? } [/code] Редактировать: я компилируюсь с -std = gnu ++ 23 так>
Я пишу приложение Python, которое будет записывать двоичный файл. Этот файл будет проанализирован каким-то кодом C, запущенным во встроенной цели.
Я уверен, что смогу сделать это, унаследовав класс Struct, но форматирование упаковки ужасно, и В...
Я пишу приложение Python, которое будет записывать двоичный файл. Этот файл будет проанализирован каким-то кодом C, запущенным во встроенной цели.
Я уверен, что смогу сделать это, унаследовав класс Struct, но форматирование упаковки ужасно, и В...
Я пишу приложение Python, которое будет записывать двоичный файл. Этот файл будет проанализирован каким-то кодом C, запущенным во встроенной цели.
Я уверен, что смогу сделать это, унаследовав класс Struct, но форматирование упаковки ужасно, и В...
У меня есть куча гибких элементов в контейнере. В качестве гибкого направления установлено значение столбца. В одном из элементов немного больше текста, поэтому его содержимое переносится на новую строку. Теперь ширина элемента автоматически...