J'ai un problème avec une macro m4. La macro estm4 n'analyse pas les variables locales
define(BARRIER, `
#if defined USE_PTHREAD_BARRIERS
barrier_wait(&$1,$2,$3);
#elif defined (USE_CENTRALIZED_BARRIERS)
central_barrier(&$1,$2,$3);
#endif
')
et dans mon fichier .c j'ai
BARRIER(Global->start, P, MyNum)
où Global->start
et P
sont globals et MyNum une variable locale.
Mais quand j'exécute
m4 macrosfile.m4 sourcefile > outputfile
dans le fichier de sortie il y a ceci:
#if defined USE_PTHREAD_BARRIERS
barrier_wait(&Global->start,P,);
#elif defined (USE_CENTRALIZED_BARRIERS)
central_barrier(&Global->start,P,);
Quelque chose ne va pas avec ma macro, ou tout simplement une limitation?
Merci d'avance.
'm4' en tant que préprocesseur de C? À ma connaissance C a un pré-processeur buildin non? -) –
@JensGustedt oui Je sais que, mais de cette façon l'utilisation peut réutiliser les mêmes macros dans différents programmes-projets. Aussi, je suis obligé de faire de cette façon ... – Manos
Les guillemets backticks/apostrophe sont en fait un bon choix, puisque les guillemets ne sont pas susceptibles d'apparaître dans le code. Par conséquent, vous pouvez souvent utiliser m4 pour traduire le code source sans modifications. (Et bien sûr, si vous avez besoin d'un caractère de citation différent, m4 le permet.) –