Pregunta

¿Cómo llamar a un símbolo con nombre destrozado desde C?

module.name:version

void* function(TypeSig); // Type of the function

Me gustaría poder utilizar rutas de código escritas en mi idioma en C.La convención de llamada a funciones es aproximadamente la misma.Es solo que debo alterar la versión y la ruta del módulo dentro de los símbolos que exporto, y tengo la misma convención de identificador que C, por lo tanto, no puedo usar guión bajo.

¿Fue útil?

Solución

IIUC, está definiendo su propio lenguaje y está buscando un algoritmo de manipulación de nombres adecuado.

Es posible que desee utilizar Intel et.al. Algoritmo de alteración de nombres de Itanium, que g++ utiliza en todas las plataformas.Para el caso específico, puede alterar cada uno de sus nombres como si la declaración de C++ fuera

namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
  void *function(int){}
}}}

que destrozaría como

_ZN6module4name4V1_08functionEi

Como todos sus símbolos usan ese algoritmo, no pueden entrar en conflicto entre sí.Tampoco pueden entrar en conflicto con una función estándar de C llamada _ZN6module4name4V1_08functionEi, ya que todos los nombres que comienzan con _Z (o _MAYÚSCULAS) están reservados para la implementación (de C).Si desea una capacidad de llamada conveniente desde g++, puede usar esta convención exacta;de lo contrario, elige una letra diferente de la Z.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top