#Ifdef (ou d’autres directives du préprocesseur) fonctionne-t-il avec les déclarations de fonctions (pour tester l’existence de fonctions)?

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