2013-09-23 4 views
0

IAR établi 6.50.6.4958IAR variables Pe550 a été installé mais jamais utilisé

IAR Worbench commune 6.5.9.2707

Nous avons une macro

#define NOT_USED(p) ((void)(p)) 

qui est utilisé pour assurer que le IAR (C) le compilateur n'émettra pas un avertissement que la variable n'est pas utilisée, ce qui fonctionne bien.

Cependant cette macro ne semble pas fonctionner pour le compilateur C++, le compilateur signale toujours un avertissement que cette variable est inutilisée.

La macro doit-elle être différente de C++ ou faut-il protéger les variables avec une sorte de directive #pragma?

/Stefan

+0

Pourquoi ne pas exclure la déclaration tous ensemble lorsque la variable n'est pas utilisée, en utilisant '# if 'ou' # ifdef': s? – Lindydancer

Répondre

0

Je viens moi-même couru dans ce problème. La seule solution que j'ai trouvé pour le moment a été référencée dans certains Renesas documentation qui fait spécifiquement référence au compilateur IAR C++. Il y a un pragma qui peut être utilisé pour désactiver cet avertissement, mais il doit être appliqué à la déclaration de la variable incriminée. Il ne peut pas être appliqué de la même manière que la macro NOT_USED que vous avez définie, ce qui est regrettable. J'ai essayé un peu de trouver une solution plus plate-forme, mais rien ne me venait à l'esprit. Si vous voulez une forme macro, vous devez utiliser le formulaire d'expression de l'opérateur pour pragmas qui vous permettent d'intégrer une pragma dans une expansion macro, par exemple:

#include <cstdint> 

#if defined(__IAR_SYSTEMS_ICC__) 
#define NOT_USED(var_declaration)  \ 
    _Pragma("diag_suppress=Pe177,Pe550") \ 
    var_declaration      \ 
    _Pragma("diag_default=Pe177,Pe550") 
#else // !defined(__IAR_SYSTEMS_ICC__) 
#define NOT_USED(var_declaration) var_declaration 
#endif 

int main() { 
    NOT_USED(int32_t foo;) 
    NOT_USED(int32_t bar = 0;) 
    NOT_USED(const int32_t baz = 1;) 
    return 0; 
} 

Notez que je ne l'ai pas essayé cette macro sur un compilateur non-IAR, mais je suis raisonnablement certain qu'il n'interférera pas avec succès dans ce cas. Je suis un peu déçu que je n'ai pas réussi à trouver une solution qui fonctionne de manière multi-plateforme et qui pourrait être substituée à la macro NOT_USED que vous avez montrée, d'autant plus que cela fonctionne pour le compilateur C. Peut-être cela vaut-il une demande de rapport de bug/fonctionnalité à IAR Systems, car il semble y avoir une différence entre leurs deux produits.

Questions connexes