J'aimerais pouvoir faire quelque chose comme
#print "C Preprocessor got here!"
à des fins de débogage. Quelle est la meilleure façon / la plus portable de faire cela?
J'aimerais pouvoir faire quelque chose comme
#print "C Preprocessor got here!"
à des fins de débogage. Quelle est la meilleure façon / la plus portable de faire cela?
Réponses:
La warning
directive est probablement la plus proche que vous obtiendrez, mais elle n'est pas entièrement indépendante de la plate-forme:
#warning "C Preprocessor got here!"
AFAIK cela fonctionne sur la plupart des compilateurs sauf MSVC, sur lequel vous devrez utiliser une pragma
directive:
#pragma message ( "C Preprocessor got here!" )
#define WARNING(msg) _Pragma("message " #msg)
Une autre solution consiste à utiliser des commentaires et un script shell pour les traiter. Cela demande une certaine discipline (ou un script shell qui détecte les fautes de frappe).
Par exemple, j'ajoute des commentaires formatés //TODO
puis un script shell qui les rassemble tous dans un rapport.
Pour des cas d'utilisation plus complexes, vous pouvez essayer d'écrire votre propre préprocesseur simple. Par exemple, vous pouvez modifier vos sources sous forme de *.c2
fichiers. Le préprocesseur simple lit la source, recherche //TODO
et écrit printf("TODO ...")
dans le *.c
fichier de sortie .
Vous ne pouvez pas. Les préprocesseurs sont traités avant le code C. Il n'y a pas de directives de préprocesseur à imprimer à l'écran, car le code du préprocesseur n'est pas exécuté, il est utilisé pour générer le code C qui sera compilé en code exécutable.
Quelque chose ne va pas avec:
#ifdef ...
printf("Hello");
#endif
Parce que c'est tout ce que vous pouvez faire en ce qui concerne les préprocesseurs.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... Je vais devoir essayer mais l'instinct me dit que la réponse est non.