Convertir punteros nulos en punteros de función en C
Convertir punteros nulos devueltos por funciones como dlsym() en punteros de función no es sencillo en C . De forma predeterminada, dicha conversión directa está prohibida en C 98/03.
Motivo de la restricción
En C 98/03, los punteros void* estaban destinados a hacer referencia a objetos, no funciona ni tiene punteros de miembros.
Soporte condicional en C 0x
En C 0x, las implementaciones admiten opcionalmente la conversión de void* a punteros de función. Si es compatible, el comportamiento debe ajustarse al estándar.
Soluciones alternativas dependientes de la implementación
Aunque no se permite la transmisión directa, estas soluciones alternativas pueden funcionar en la mayoría de las plataformas:
fptr my_fptr = reinterpret_cast(reinterpret_cast(gptr));
fptr my_ptr = 0;
reinterpret_cast(my_ptr) = gptr;
Estas soluciones aprovechan el hecho de que las direcciones de los punteros de función son objetos y se pueden convertir en punteros void** usando reinterpret_cast.
Nota de precaución
Estas soluciones implican un comportamiento indefinido y deben usarse con discreción.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3