«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Можете ли вы преобразовать указатели void в указатели на функции в C++?

Можете ли вы преобразовать указатели void в указатели на функции в C++?

Опубликовано 8 ноября 2024 г.
Просматривать:840

Can You Cast void Pointers to Function Pointers in C  ?

Приведение указателей Void к указателям функций в C

Преобразование указателей void, возвращаемых такими функциями, как dlsym(), в указатели функций в C не является простым делом . По умолчанию такое прямое приведение запрещено в C 98/03.

Причина ограничения

В C 98/03 указатели void* предназначались для ссылок на объекты, не указатели на функции или члены.

Условная поддержка в C 0x

В C 0x приведение void* к указателям на функции дополнительно поддерживается реализациями. Если поддерживается, поведение должно соответствовать стандарту.

Обходные пути, зависящие от реализации

Хотя прямое приведение типов не разрешено, эти обходные пути могут работать на большинстве платформ:

  • Переосмыслить приведение:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
  • Реинтерпретация переменной:
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;

Эти обходные пути используют тот факт, что адреса указателей функций являются объектами и могут быть преобразованы в указатели void** с помощью reinterpret_cast.

Предупреждение

Эти обходные пути подразумевают неопределенное поведение, и их следует использовать с осторожностью.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3