Déterminer le niveau d’optimisation dans le préprocesseur?

-Og est une option d’optimisation relativement nouvelle destinée à améliorer l’expérience de débogage lors de l’application d’optimisations. Si un utilisateur sélectionne -Og , j’aimerais que mes fichiers source activent d’autres chemins de code afin d’améliorer l’expérience de débogage. GCC propose la macro de préprocesseur __OPTIMIZE__ , mais elle n’est définie que sur 1 lorsque les optimisations sont effectives.

Existe-t-il un moyen d’apprendre le niveau d’optimisation, comme -O1 , -O3 ou -Og , à utiliser avec le pré-processeur?

Je pense qu’il n’est pas possible de connaître directement le niveau d’optimisation utilisé pour comstackr le logiciel, car cela ne figure pas dans la liste des symboles de préprocesseur définis.

Vous pouvez vous fier à -DNDEBUG (pas de débogage) pour désactiver les assertions dans le code de version et activer votre chemin de code “débogage” dans ce cas.

Cependant, je pense qu’une meilleure chose à faire est d’avoir un ensemble de symboles locaux à votre système et de laisser l’utilisateur choisir ce qu’il utilisera explicitement:

  • MYPROJECT_DNDEBUG
  • MYPROJECT_OPTIMIZE
  • MYPROJECT_OPTIMIZE_AGGRESSIVELY

Cela facilite beaucoup le débogage ou les différences de comportement entre publication / débogage, car vous pouvez activer / désactiver progressivement les différents comportements.