Utiliser un pragma dans un define

Utiliser un pragma dans un define - C - Programmation

Marsh Posté le 20-03-2015 à 17:37:43    

Bonjour
 
J'ai une question sur les define et pragma. (je développe sur µC avec IAR)
 
Actuellement mon code fonctionne avec les optimisations activées ce qui rend le debug de certaine fonctions pénible. Grâce à un pragma spécifique je peux désactiver les optimisations sur des fonctions.
 
Récemment lors d'un commit un peu trop rapide, les optimisations avaient été désactivées alors qu'elles étaient nécessaire.
Afin de ce rendre compte des demandes de non-optimisation, j'ai eu l'idée de créer un define pour désactiver les optimisations et afficher un warning (et en rlz générer une erreur)
 
Mais cette solution ne fonctionne pas. Le compilateur n'aime pas la présence d'un # dans un define.  (Error[Pe010]: "#" not expected here )
 
Avez vous une idée pour me permettre de désactiver mes optimisations et afficher un warning (idéalement avec un message perso)  grâce à un define (ou autre solution simple) ?

Reply

Marsh Posté le 20-03-2015 à 17:37:43   

Reply

Marsh Posté le 20-03-2015 à 18:16:41    

tu veux qu'il ait quelle portée, ton pragma ?
 
Parce qu'honnêtement, initialement, je me suis dit "suffit de le foutre dans un fichier de config inclus partout", mais en fait, c'est plus simple de compiler en debug plutôt que de désactiver les optimisations sur l'ensemble de ton projet.
 
Autre solution bâtarde : tu fais un header "optimize_off.h" qui n'a que le test de ton choix et un pragma optimize comme il faut. Ensuite, dans ton code, tu fais une inclusion de ce header où tu veux ton pragma optimize optionnel ?


---------------
last.fm
Reply

Marsh Posté le 20-03-2015 à 22:21:28    

le pragma pour désactiver les optimisations n'a un effet que sur la fonction définit dessous et ce comportement me convient.  
 
j'ai un en effet un projet en debug et un en rlz mais j'ai besoin des optimisations dans les 2 cas. C'est pour ça que je cherche un moyen d'éviter ou de rendre très visible un pragma de non optimisation en dur dans le code.  
 
ce qui est pénible sur ce projet c'est que j'ai besoin des optimisations que sur une partie du projet mais IAR ne permet pas de définir les parties à optimiser. On ne peut que choisir un niveau d'optimisation pour l'ensemble du projet et ensuite diminuer les optimisations sur certaines parties.
 
j'avais envisagé la solution du header avec le warning et le pragma de non optimisation mais je ne trouve pas ça très propre.


Message édité par Digaboy le 20-03-2015 à 22:22:02
Reply

Marsh Posté le 21-03-2015 à 12:54:44    

Tu as peut être vu ceci: http://stackoverflow.com/questions [...] ide-define
Donc si ton compilo supporte le standard C99 et sa directive _Pragma() c'est faisable dans un #define, sinon, c'est mort, pour des questions de non-réentrance du préprocesseur.
 
Mais habituellement, c'est au niveau du makefile et des options passées au compilo qu'on active ou non des optimisations en fonctions de la version release/debug.
Et sinon, il y a la solution lourde de coller des trucs style
#ifdef Debug  
#pragma ...
#endif
la ou tu en as besoin
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-03-2015 à 00:19:51    

gilou a écrit :

Tu as peut être vu ceci: http://stackoverflow.com/questions [...] ide-define
Donc si ton compilo supporte le standard C99 et sa directive _Pragma() c'est faisable dans un #define, sinon, c'est mort, pour des questions de non-réentrance du préprocesseur.
 
Mais habituellement, c'est au niveau du makefile et des options passées au compilo qu'on active ou non des optimisations en fonctions de la version release/debug.
Et sinon, il y a la solution lourde de coller des trucs style
#ifdef Debug  
#pragma ...
#endif
la ou tu en as besoin
 
A+,


merci pour le lien, je teste ça lundi.  
 
c'est justement pour éviter la solution lourde que je voulais une macro tout en un (même si je pense que ça va finir comme ça pour mes quelques tests)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed