Le problème là venait, je pense, de l'utilisation ou non d'argument pour la macro.
Comme le dit godrik, le préprocessseur est con comme ses pieds. S'il attend une macro sans argument, alors il veut voir la macro sans argument. Et l'argument d'une macro est une parenthèse ouvrante qui suit _immédiatement_ la nom de la macro (sans espace). Donc si kaxes ecrit :
si(test)
alors le préprocesseur va voir un appel à si avec un argument et ne pas être heureux. Solution : mettre un espace entre "si" et "(test)".