53 votes

Portabilité de la directive #warning préprocesseur

Je sais que la directive #warning n'est pas standard en C / C ++, mais plusieurs compilateurs la prennent en charge, y compris gcc / g ++. Mais pour ceux qui ne le supportent pas, vont-ils l'ignorer silencieusement ou cela va-t-il aboutir à un échec de compilation? En d’autres termes, puis-je l’utiliser en toute sécurité dans mon projet sans casser la construction des compilateurs qui ne le prennent pas en charge?

73voto

nolandda Points 728

Il convient de noter que MSVC utilise la syntaxe:

#pragma message ("votre texte d'avertissement ici")

La syntaxe habituelle #warning génère une erreur fatale

C1021: 'avertissement' de la commande de préprocesseur non valide

il n'est donc pas portable pour ces compilateurs.

30voto

Greg Hewgill Points 356191

Il est probable que si un compilateur ne supporte pas #warning, il générera une erreur. Contrairement à #pragma, il n’est pas recommandé que le préprocesseur ignore les directives qu’il ne comprend pas.

Cela dit, j’ai utilisé des compilateurs sur différentes plates-formes (assez communes) et ils ont tous pris en charge le #warning.

3voto

Jonathan Leffler Points 299946

Vous êtes susceptible d'obtenir au moins une inconnue directive avertissement de compilateurs qui ne reconnaissent pas #avertissement, même si le bloc de code n'est pas inclus dans la compilation. Qui pourrait ou ne pourrait pas être traitée comme une erreur - le compilateur pourrait légitimement considérer comme une erreur, mais beaucoup seraient plus laxistes.

Connaissez-vous (pouvez-vous les nommer) un compilateur GCC/G++ qui fournit des #avertissement? [Édité: Sun Solaris 10 (Sparc) et le Studio 11 compilateurs C/C++ à la fois accept #avertissement.]

1voto

Andrew Edgecombe Points 13183

J'ai eu ce problème une fois avec un compilateur pour un processeur Atmel. Et il a généré des erreurs de préprocesseur en raison du jeton #warning inconnu.

Malheureusement, la solution semblait être de convertir l’arbre source entier pour qu’il utilise l’équivalent # pragma et d’accepter que le comportement de construction allait différer si vous utilisiez gcc.

0voto

1800 INFORMATION Points 55907

En fait, la plupart des compilateurs que je connais ignorent les directives inconnues #pragma et génèrent un message d'avertissement. Dans le pire des cas, vous recevrez toujours un avertissement.

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