Considérez ce qui suit - Je souhaite vérifier avec #if
#endif
si un jeton est défini quelque part dans le code. J'utilise une macro CONCAT(input)
qui doit coller les parties constantes et changeantes du jeton que je veux vérifier.Impossible de résoudre une macro similaire à une fonction dans un bloc de compilation conditionnel
Malheureusement, l'approche présentée provoque ci-dessous une erreur de compilation:
error: missing binary operator before token "("
J'ai trouvé les expressions qui peuvent être mis à l'intérieur d'un bloc #if
#endif
:
https://gcc.gnu.org/onlinedocs/cpp/If.html#If
Et apparemment, il dit que:
Macros. Toutes les macros de l'expression sont développées avant le début du calcul de la valeur de l'expression.
Il se avère que (CONCAT(test))
devrait être résolu, mais ce n'est pas.
Existe-t-il une solution permettant de résoudre correctement les noms de jetons concaténés dans un bloc de compilation conditionnel?
#include <stdio.h>
#define CONCAT(input) string##input
#define stringtest 1
int main(void)
{
#if defined(CONCAT(test)) && (CONCAT(test)==1)
printf("OK");
#else
printf("NOT");
#endif
return 0;
}
Je pense que vous ne pouvez pas faire cela. – tilz0R