87 votes

Existe-t-il un moyen portable d’imprimer un message à partir du préprocesseur C?

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?

102voto

You Points 8861

La directive warning 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!"
 

Autant que je sache, cela fonctionne sur la plupart des compilateurs sauf MSVC, sur lequel vous devrez utiliser une directive pragma :

 #pragma message ( "C Preprocessor got here!" )
 

47voto

Matt Joiner Points 29194

Ce qui suit est pris en charge par MSVCet GCC.

Clang a commencé à ajouter le support récemment, voir ici pour plus d’informations.

11voto

Ruel Points 6140

Vous voudrez peut-être essayer: #pragma message("Hello World!")

8voto

nos Points 102226

La plupart des compilateurs C reconnaîtront une directive #warning , donc

  #warning "Got here"
 

Il y a aussi la directive standard '#error',

  #error "Got here"
 

Bien que tous les compilateurs le supportent, cela arrêtera également la compilation / le prétraitement.

-15voto

Alexander Rafferty Points 3853

Tu ne peux pas. Les préprocesseurs sont traités avant le code C. Aucune directive de préprocesseur à imprimer à l'écran, car le code de 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X