Pergunta

Como chamar um símbolo mutilado-nome de C?

module.name:version

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

Eu gostaria de ser capaz de usar codepaths escrito na minha língua em C. A função convenção de chamada é aproximadamente o mesmo. É só que eu devo mangle na versão eo caminho módulo dentro dos símbolos I exportam, e eu tenho a mesma convenção de identificador como C tem, portanto, eu não posso simplesmente usar sublinhado.

Foi útil?

Solução

IIUC, você está definindo seu próprio idioma, e está procurando um algoritmo desconfiguração nome adequado.

Você pode querer usar o et.al. Intel Itanium citar calandrar algoritmo , que é usado pelo g ++ em todas plataformas. Para o caso específico, você pode mangle cada um de seus nomes como se a declaração do C ++ era

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

que mangle como

_ZN6module4name4V1_08functionEi

Como todos os seus símbolos usar esse algoritmo, eles não podem conflito uns com os outros. Eles também não podem conflito com uma função C padrão chamado _ZN6module4name4V1_08functionEi, como todos os nomes que começam com _Z (ou, _UPPERCASE) são reservados para a implementação (de C). Se você quiser exigibilidade conveniente do g ++, você pode usar esta convenção exata; outra coisa que você pegar uma carta diferente de Z.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top