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?
Réponses
Trop de publicités?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.
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.]
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.