Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2307 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Utiliser un pragma dans un define

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser un pragma dans un define

n°2253812
Digaboy
Posté le 20-03-2015 à 17:37:43  profilanswer
 

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) ?

mood
Publicité
Posté le 20-03-2015 à 17:37:43  profilanswer
 

n°2253817
theshockwa​ve
I work at a firm named Koslow
Posté le 20-03-2015 à 18:16:41  profilanswer
 

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
n°2253823
Digaboy
Posté le 20-03-2015 à 22:21:28  profilanswer
 

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
n°2253842
gilou
Modérateur
Modzilla
Posté le 21-03-2015 à 12:54:44  profilanswer
 

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é!  --
n°2253867
Digaboy
Posté le 22-03-2015 à 00:19:51  profilanswer
 

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)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Utiliser un pragma dans un define

 

Sujets relatifs
[RESOLU (et toute seule en plus)] Python 3.2 Comment utiliser les set?Utiliser getClass() dans une fonction
Conseils sur les techno à utiliserutiliser les valeurs de deux fichiers
utiliser boost pour générer des variables aléatoiresUtiliser les classes en Java avec eclipse
Utiliser plusieurs libs graphiques : ne pas perdre de performances[PHP] Quelle API pour utiliser les données de localisation ?
[C++] utiliser des classes dans mon codeutiliser une jauge de contrainte avec arduino
Plus de sujets relatifs à : Utiliser un pragma dans un define


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR