C Limites d'identificateurs
-
21-08-2019 - |
Question
Comment appeler un symbole de nom mutilées de C?
module.name:version
void* function(TypeSig); // Type of the function
Je veux être en mesure d'utiliser codepaths écrit dans ma langue en C. La fonction convention d'appel est sur le même. Il est juste que je dois mutiler dans la version et le chemin du module dans les symboles que je l'exportation, et j'ai la même convention d'identifiant que C a, par conséquent, je ne peux pas utiliser underscore.
La solution
IIUC, vous définissez votre propre langue, et êtes à la recherche d'un nom approprié algorithme mutiler.
Vous pouvez utiliser le processeur Intel et.al. nom algorithme mutiler Itanium, qui est utilisé par g ++ sur tous les plates-formes. Pour le cas spécifique, vous pouvez Mutilation chacun de vos noms, comme si la déclaration du C était
namespace module{ namespace name { namespace Vversion /*e.g. V1_0 */ {
void *function(int){}
}}}
qui comme mutiler
_ZN6module4name4V1_08functionEi
Comme tous vos symboles utilisent cet algorithme, ils ne peuvent pas entrer en conflit les uns avec les autres. Ils peuvent également ne pas entrer en conflit avec une fonction standard C appelée _ZN6module4name4V1_08functionEi
, comme tous les noms commençant par _Z (ou, _UPPERCASE) sont réservés à la mise en œuvre (C). Si vous voulez de g pratique de remboursement anticipé ++, vous pouvez utiliser cette convention exacte; ce que vous choisissez une autre lettre de Z.