Pourquoi le code suivant ne fonctionne-t-il pas comme prévu?
void foobar(int); #ifndef foobar printf("foobar exists"); #endif
Il imprime toujours le message. il est évidemment impossible de détecter l’existence d’une fonction en tant qu’entité. (Est-ce un problème de surcharge?)
Pourquoi #ifdef
(ou ses variantes) ne détecte-t-il pas les déclarations de fonction? Les déclarations doivent être disponibles au pré-traitement, cela devrait donc fonctionner, n’est-ce pas? Si non, y a-t-il une alternative ou une solution de rechange?
Les déclarations doivent être disponibles au pré-traitement, cela devrait donc fonctionner, n’est-ce pas?
Le pré-processeur fonctionne avant la compilation (d’où le “pré”), de sorte qu’il n’y a pas de symboles compilés à ce stade, mais uniquement du texte et des extensions de texte. Le préprocesseur et le compilateur sont distincts et travaillent indépendamment l’un de l’autre, à l’exception du fait que le préprocesseur modifie la source transmise au compilateur.
Le comportement typique du préprocesseur consiste à apparier la déclaration de fonction à l’utilisation de la fonction en utilisant la même constante de define
:
#define FOO #ifdef FOO void foo(int); #endif #ifdef FOO printf("foo exists"); #endif
Le préprocesseur fonctionne avec les jetons de préprocesseur définis à l’aide de directives de préprocesseur. Le pré-processeur ne fonctionne pas avec les types déclarés dans votre code (quelle que soit la langue).
Vous devez utiliser la directive #define preprocessor pour déclarer un jeton visible pour les autres contrôles de condition préprocesseur.
#define FOO #if FOO // this code will comstack int x = 5; #else // this code won't int x = 10; #endif