limites de identificador C
-
21-08-2019 - |
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.
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.