Y a-t-il un moyen de "générer" un nom de fonction en utilisant l'opérateur ## et une valeur variable. Par exemple: macro acclamations p> p> amusement code> génère
fOOI code>. Existe-t-il un moyen d'obtenir
FOO0 code> d'une manière ou d'une autre, ou je dois utiliser le numéro réel 0 dans ce cas, par exemple
amusant (FOO, 0) (1); Code> P >
3 Réponses :
Vous devez utiliser 0 (ou une autre macro). L'expansion macro est traitée par le pré-processeur C à l'heure de la compilation. Cela ne sait rien sur les valeurs d'exécution des variables. P>
Comme indiqué, l'expansion de la macro est effectuée à l'heure de la compilation. Le nom de la fonction ne serait donc pas connu au moment de l'exécution.
Il est plus approprié d'utiliser des pointeurs de fonction et une matrice à eux. P> < p> c'est ça. J'espère que cela aide p> p>
Le prétraitement «C» est un processus de remplacement des macros avec le texte de leurs définitions. Certaines opérations comme ## permettent d'ajouter son argument en tant que texte dans les définitions. Donc, tout est fait avant même que la compilation commence.
En conséquence, dans votre cas ou p> dans le dernier cas amusant (amusant, i) code> sera substitué comme texte et formulaire
funi code>. Le seul moyen limité de créer des noms de fonction comme si vous souhaitez utiliser des valeurs de texte réelles ou d'autres macros. Voici 2 exemples qui fonctionneront avec pré-traitement: p>
I CODE> est une macro elle-même, donc cela fonctionne également. (Il est toujours une bonne idée de nommer le nom de la macro en majuscules). p> p>
Cela créerait une fonction appelée
FOOI code>.
Le préprocesseur n'est pas le bon outil de faire cela, car les macros sont élargis une heure de compilation. Vous devez examiner les pointeurs de la fonction.
Cela ressemble à un problème xy. La réponse est "non" mais cela ne résout rien. Quel est le vrai problème?