Opposite de la «ssortingngification» du préprocesseur C

Lorsque vous utilisez le préprocesseur, vous pouvez définir l’argument de macro comme suit:

#define TO_STRING(x) "a ssortingng with " #x 

et donc lorsqu’il est utilisé, le résultat est le suivant:

TO_STRING(test) sera développé comme TO_STRING(test) : "a ssortingng with test"

Y a-t-il un moyen de faire le contraire? Obtenir un littéral de chaîne comme argument d’entrée et générer un identifiant C? Par exemple:

TO_IDENTIFIER("some_identifier") serait étendu à: some_identifier

Merci pour vos réponses.

EDIT: Pour ceux qui se demandent pourquoi j’en ai besoin:

Je voulais faire référence aux nœuds d’un graphe de scène de mon moteur 3D par des identificateurs de chaîne, tout en évitant de comparer des chaînes dans des boucles serrées. J’ai donc pensé écrire un outil simple qui s’exécutera à l’étape de la compilation et recherchera une chaîne prédéfinie – par exemple ID("something") . Ensuite, pour chaque jeton de ce type, il calcule CRC32 de la chaîne entre les parenthèses et génère un fichier d’en-tête avec #defines contenant ces identificateurs numériques. Par exemple pour la chaîne "something" ce serait:

#define __CRC32ID_something 0x09DA31FB

Ensuite, le fichier d’en-tête généré serait inclus par chaque fichier cpp à l’aide de macros ID(x) . L’ ID("something") serait bien entendu étendu à __CRC32ID_something , le compilateur verrait donc en réalité de simples identificateurs d’entiers au lieu de chaînes conviviales. Bien sûr, je vais maintenant me contenter d’ ID(something) mais j’ai pensé que l’utilisation de guillemets aurait plus de sens – un programmeur qui ne sait pas comment fonctionne la macro ID peut penser que something sans guillemets est un identifiant C alors qu’en réalité, l’identifiant n’existe pas du tout.

Non, vous ne pouvez pas débrider quelque chose.

 //unssortingngify test enum fruits{apple,pear}; #define IF_WS_COMPARE_SET_ENUM(x) if(ws.compare(L#x)==0)f_ret=x; fruits enum_from_ssortingng(wssortingng ws) { fruits f_ret; IF_WS_COMPARE_SET_ENUM(apple) IF_WS_COMPARE_SET_ENUM(pear) return f_ret; } void main() { fruits f; f=enum_from_ssortingng(L"apple"); f=enum_from_ssortingng(L"pear"); }