0
votes

Préprocesseur ## Opérateur et variable

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: xxx

macro amusement génère fOOI . Existe-t-il un moyen d'obtenir FOO0 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);

acclamations


3 commentaires

Cela créerait une fonction appelée FOOI .


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?


3 Réponses :


3
votes

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.


0 commentaires

2
votes

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> exemple: xxx

c'est ça. J'espère que cela aide


0 commentaires

1
votes

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 amusant (amusant, i) sera substitué comme texte et formulaire funi . 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: xxx

ou xxx

dans le dernier cas I 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).


0 commentaires