172 похожих чатов

Подскажите зачем в растономиконе в структуру кладут пустой массив при

реализации "непрозрачного" типа?

#[repr(C)]
pub struct Foo {
_data: [u8; 0],
_marker:
core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

Там есть следующее пояснение:
> By including at least one private field and no constructor, we create an opaque type that we can't instantiate outside of this module. (A struct with no field could be instantiated by anyone.) We also want to use this type in FFI, so we have to add #[repr(C)]. The marker ensures the compiler does not mark the struct as Send, Sync and Unpin are not applied to the struct. (*mut u8 is not Send or Sync, PhantomPinned is not Unpin)
(https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs)

С маркером понятно, но это поле ведь тоже приватное и его было бы достаточно или есть какие-то тонкости, которые я упускаю?

2 ответов

7 просмотров

Читай https://www.geeksforgeeks.org/flexible-array-members-structure-c/.

Stanislav-Tkach Автор вопроса
Roman
Читай https://www.geeksforgeeks.org/flexible-array...

В курсе. Но откуда инфа, что в номиконе именно это изобразить хотели? Или ты просто среагировал на "пустой массив"? На мой взгляд, не похоже. Во первых, прямо по ссылке говорится: > The structure must contain at least one more named member in addition to the flexible array member. Что не соблюдается в приведённом примере. Во вторых, если уж пытаться изображать в расте flexible array member, то логичнее это делать через DST.

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
13
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Карта сайта