Visualiser l’expansion de macro C/C++
Les macros longues peuvent être difficiles à lire. Visual Studio peut maintenant développer des macros C et C++. Vous pouvez obtenir une copie dans le Presse-papiers de l’apparence de la macro développée, remplacer la macro inline par son expansion et développer pas à pas une macro pour voir ce qu’elle ressemble à chaque étape de l’expansion. Dans cet article, vous allez tester toutes ces fonctionnalités.
Prérequis
- Visual Studio version 17.5 ou ultérieure
Créer l’exemple
Démarrez Visual Studio 2022, version 17.5 ou ultérieure, puis créez une application console C++.
Remplacez le code par défaut par :
#include <iostream> #define MASS 10.0 #define ACCELERATION 20.0 #define SPEED 5.0 #define TIME 2.0 #define DISTANCE() (SPEED * TIME) #define FORCE()(MASS * ACCELERATION) #define WORK()(FORCE() * DISTANCE()) #define POWER()(WORK()/TIME) int main() { std::cout << "Distance: " << DISTANCE() << std::endl; std::cout << "Force: " << FORCE() << std::endl; std::cout << "Work: " << WORK() << std::endl; std::cout << "Power: " << POWER() << std::endl; }
Copier une macro développée
Vous pouvez inspecter la valeur développée d’une macro, même lorsque plusieurs étapes de préprocesseur sont impliquées, en procédant comme suit :
Placez le curseur sur la macro à l’intérieur
POWER
main()
de l’exemple.Lorsque vous pointez sur la macro, les options s’affichent pour copier, développer inline, visualiser l’expansion et rechercher en ligne :
La fenêtre de macro est ouverte sur POWER pour montrer qu’elle se développe sur (((10.0 * 20.0) * (5.0 * 2.0)) / 2.0). Les options de copie, de développement inline, d’expansion visuelle et de recherche en ligne s’affichent en bas de la fenêtre.
Choisissez Copier.
Créez un commentaire en suivant la
POWER
ligne et choisissez Coller (Ctrl+V). L’expansion de la macro, sous la forme d’un commentaire près de votre macro, ressemble à ceci :// (((10.0 * 20.0)* (5.0 * 2.0)) / 2.0).
le raccourci clavier de cette action est Ctrl+M, Ctrl+C.
Développer une macro inline
Procédez comme suit pour développer une macro inline, qui remplace la macro par son expansion :
- Placez le curseur sur la macro à l’intérieur
POWER
main()
de l’exemple. - Lorsque vous pointez sur la macro, les options s’affichent pour copier, développer inline, visualiser l’expansion et rechercher en ligne
- Choisissez Développer inline. La
POWER()
macro est remplacée par sa valeur développée :std::cout << "Power: " << (((10.0 * 20.0) * (5.0 * 2.0)) / 2.0) << std::endl;
. Le raccourci clavier de cette action est Ctrl+M, Ctrl+I.
Visualiser l’expansion des macros
Vous pouvez développer une macro une étape à la fois. Cela est utile lorsqu’il existe des macros imbriquées et que vous souhaitez voir l’extension pas à pas. Pour visualiser l’extension de macro pour la WORK
macro, procédez comme suit :
Placez le curseur sur la macro à l’intérieur
WORK
main()
de l’exemple.Lorsque vous pointez sur la macro, les options s’affichent pour copier, développer inline, visualiser l’expansion et rechercher en ligne.
Choisissez Visualiser l’expansion. Le raccourci clavier de cette action est Ctrl+M suivi de Ctrl+V.
La fenêtre d’extension de macro s’affiche. La première expansion de la
WORK
macro est visible :(FORCE() * DISTANCE())
La fenêtre de visualisation de macro est ouverte sur FORCE pour montrer qu’elle se développe initialement sur (FORCE()*DISTANCE()). Il existe des crochets à angle uniques dans la fenêtre pour avancer et reculer une seule expansion à la fois. Les crochets doubles s’étendent ou annulent entièrement l’expansion de la macro.
Cliquez sur le crochet droit pour développer la
FORCE
macro. La fenêtre affiche maintenant l’extensionFORCE
de macro :(MASS * ACCELERATION) * DISTANCE()
.Cliquez sur le crochet droit pour développer une autre étape. La fenêtre affiche maintenant l’extension
FORCE
de macro :((10.0 * ACCELERATION) * DISTANCE())
.
Continuez à développer la macro pour voir l’extension complète de la WORK
macro, à savoir : ((10.0 * 20.0) * (5.0 * 2.0))
.
Vous pouvez utiliser les crochets doubles pour développer entièrement la macro ou inverser l’expansion au premier niveau d’expansion.