Или, может быть, я не должен бросать.Вот что я делаю:
Я пишу фрагмент кода, который связывает драйвер устройства Linux с библиотекой более высокого уровня.Авторы библиотеки используют void *
(под новым именем через typedef
) для хранения дескрипторов объекта, специфичного для реализации, который описывает канал связи.
Драйвер, который я хочу подключить к библиотеке, использует int
для хранения дескрипторов на его каналах (потому что они являются файловыми дескрипторами, возвращаемыми вызовами open()
).Итак, в моем коде я получаю void *
, переданный из библиотеки, и мне нужно вызвать вещи из драйвера, используя int
и наоборот.I. e.:
// somewhere in the library ...
typedef void* CAN_HANDLE;
// ... in my code
CAN_HANDLE canOpen_driver(s_BOARD *board)
{
int fd;
// ...
fd = open(busname, O_RDWR);
// ...
return (CAN_HANDLE) fd; // <-- not safe, especially not when converting back.
}
Адаптеры, которые написали другие, на самом деле хранят некоторую структуру и т. Д. Где-то и просто приводятся между указателями, поэтому проблем с размером не возникает.В моем случае я не очень хочу управлять файловыми дескрипторами, как это уже делает ОС.
На моем ПК, я думаю, указатель больше, чем int
, так что я мог бы немного изменить свойвыход из этого, но код также входит во встроенные системы, и я не достаточно опытен, чтобы делать какие-либо предположения относительно размера типов на этих машинах.