Configurer Visual Studio Code pour développer en C ou C++

Alexandre Laurent

Visual Studio Code est un éditeur de développement intégré populaire. Cette popularité est grandement liée à son support des extensions, permettant à l’outil de prendre en charge une multitude de technologies. Cet article montre comment configurer Visual Studio Code pour du développement en C ou en C++.

Commentez

- Titre : Configurer Visual Studio Code pour développer en C ou C++

- Auteur : Alexandre Laurent

- Parution : 4 février 2025

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2025 Alexandre Laurent. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Les extensions pour le C et C++

- II-A. C/C++

- II-B. CMake

- II-C. Clang-Format

- III. Autres extensions

- III-A. Thèmes Visual Studio

- III-B. GitLens

- IV. Conclusion

- V. Documentation

- VI. Remerciements

I - Introduction

Une fois installé, Visual Studio Code n’offre que les fonctionnalités d’un simple éditeur. En effet, même si la coloration syntaxique fonctionne, il ne sera pas possible de compiler et lancer le programme résultant. Visual Studio Code supporte un mécanisme d’extension permettant d’étendre les fonctionnalités du logiciel, et notamment, d’offrir les outils que l’on attend d’un environnement de développement intégré pour du C ou du C++.

Avant même d’installer les extensions, il est nécessaire d’installer un compilateur (GCC [gcc pour le C et g++ pour le C++], clang [clang pour le C et clang++ pour le C++], MSVC) pour transformer votre code source en programme exécutable. Les extensions permettant juste d’utiliser, au sein de Visual Studio Code, les outils installés.

De même, pour utiliser CMake au travers de Visual Studio Code, il est nécessaire d’avoir installé le programme CMake (celui-ci est inclus avec Microsoft Visual Studio).

II - Les extensions pour le C et C++

II-A - C/C++

Afin d’ajouter le support des langages C et C++, l’autocomplétion et de pouvoir lancer la compilation directement dans Visual Studio Code, il faudra installer l’extension C/C++. Au préalable, un compilateur C++ doit être installé (MSVC, GCC ou Clang). Une fois l’extension en place, celle-ci ajoute un bouton, en haut à droite, pour compiler et lancer le programme. En appuyant sur le bouton, la fenêtre de terminal embarqué va ouvrir deux onglets : un pour la sortie de compilation et un pour la sortie du programme.

Par défaut, deux options d’exécution sont disponibles :

- « Debug C/C++ File » ;

- « Run C/C++ File ».

La première option permet de compiler et lancer le programme dans le débogueur, contrairement à la seconde, qui lance le programme sans débogueur.

La première fois, lors de l’utilisation de l’une de ces deux options, Visual Studio Code propose plusieurs possibilités pour réaliser l’action de compilation et d’exécution. Notamment, il faudra alors indiquer à l’éditeur quel compilateur utiliser.

Il est aussi possible de personnaliser ces commandes, comme proposé dans le panneau gauche de la section « Run and Debug ». En effet, de nouvelles commandes peuvent être définies grâce au fichier launch.json (à placer dans un sous-dossier .vscode). Voici un exemple pour introduire une commande de débogage :

launch.json

{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++ build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "G++ build active file"
}
]
}

Cette commande s’exécutera alors en appuyant sur F5, suivant l’option choisie en haut à gauche de Visual Studio Code. Aussi, cette commande ne peut réussir que si l’exécutable a été compilé, d’où la présence du champ preLaunchTask. En effet, ce champ indique une tâche à effectuer avant de lancer la commande et référence une tâche que l’on définira dans le fichier tasks.json.

Voici un exemple de fichier tasks.json permettant de compiler (en C++) le fichier courant :

tasks.json

{
"tasks": [
{
"type": "cppbuild",
"label": "G++ build active file",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-Wall",
"-Wextra",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}

La ligne la plus importante est celle concernant la commande à lancer : « command ». Par exemple, pour compiler en C, il suffirait donc de remplacer la commande appelée par /usr/bin/gcc.

Sous Windows, pour utiliser le compilateur de Microsoft Visual Studio (cl.exe), il sera nécessaire de démarrer Visual Studio Code depuis le « Developer Command Prompt », sans quoi, l’éditeur ne pourra pas trouver le compilateur. L’utilisation de CMake enlève cette contrainte.

À noter que Microsoft Visual Studio propose un environnement de développement intégré plus complet que Visual Studio Code.

Finalement, la configuration de l’extension repose sur un fichier spécifique : c_cpp_properties.json, aussi accessible depuis la palette de commandes (Ctrl + Maj + P).

Si vous ne trouvez pas certaines extensions, notamment celles de Microsoft, vous utilisez probablement la version open source de Visual Studio Code (Code/Code OSS) ou VSCodium.

La solution pour régler ce problème est expliquée sur StackOverflow ou le Github de Visual Studio Code : éditez le fichier product.json (à trouver dans le répertoire d’installation de Visual Studio Code) et remplacez l’URL de la galerie d’extensions par :

"extensionsGallery": {
"serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery",
"cacheUrl": "https://vscode.blob.core.windows.net/gallery/index",
"itemUrl": "https://marketplace.visualstudio.com/items"
}

Avec cette première extension, vous pouvez programmer en C/C++, éditer du code, bénéficier de l’autocomplétion, compiler, exécuter et déboguer votre code directement dans Visual Studio Code. Toutefois, une telle configuration ne fonctionne que pour un unique fichier source. En effet, les tâches et commandes de lancement ne vont compiler que le fichier courant, cela peut être pratique pour des tests rapides, mais rarement pour un projet.

Si l’autocomplétion et les outils de navigation et de refactoring fournis par l’extension C/C++ de Microsoft (appelée IntelliSense) ne vous conviennent pas, vous pouvez utiliser celle du serveur de langage clangd grâce à l’extension clangd. Sachant que les deux extensions apportent des fonctionnalités similaires, à l’installation de l’extension clangd, un message d’avertissement signalera de possibles conflits et proposera alors de désactiver la fonctionnalité IntelliSense de l’extension C/C++.

II-B - CMake

CMake est un logiciel permettant, à partir d’un fichier décrivant le projet, de générer les fichiers nécessaires à la construction du projet. En effet, à partir du fichier CMakeLists.txt, CMake va générer les fichiers de projets adéquats pour compiler le projet (Makefile, fichiers Visual Studio…). Pour en savoir plus, vous pouvez consulter cette introduction à l’outil.

Sachant que la syntaxe d’un fichier CMakeLists.txt est, par défaut, inconnue de Visual Studio Code, il est donc nécessaire d’installer l’extension CMake Tools. Celle-ci apporte notamment la coloration syntaxique et l’autocomplétion facilitant ainsi l’édition de fichiers CMakeLists.txt ainsi que la prise en charge des fichiers de préréglages (CMakePresets.txt).

Une fois installée, l’extension propose une liste de kits (ensemble d’outils pour compiler le projet). Aussi, l’extension ajoute deux boutons sur la colonne de gauche. Le premier permet de gérer les tests à travers ctest et le second de configurer CMake (kit, cible à compiler…). Dans la barre en bas de Visual Studio Code, trois boutons sont ajoutés :

Ceux-ci permettent de lancer CMake, de déboguer ou simplement d’exécuter le projet. De plus, l’extension ajoute une multitude de commandes, accessibles dans la palette de commandes (Ctrl + Maj +P) dont :

- « CMake : Configure » (pour lancer CMake). Par défaut, CMake sera aussi lancé chaque fois que vous modifiez le fichier CMakeLists.txt (cette fonctionnalité est désactivable depuis les paramètres de l’extension) ;

- « CMake : Build » : pour compiler le projet. Aussi disponible avec le raccourci clavier ‘F7’ ;

- « CMake : Debug » : pour lancer le projet dans un débogueur. Aussi disponible avec le raccourci clavier ‘Maj + F5’ ;

- « CMake : Run without debugging » : pour lancer le projet. Aussi disponible avec le raccourci clavier ‘Ctrl + F5’.

Encore une fois, l’extension support les commandes de base sans nécessiter un fichier launch.json ou tasks.json. Toutefois, pour personnaliser les actions réalisées lors de la compilation ou lors de l’exécution, vous pouvez créer ces fichiers dans un sous-dossier .vscode de votre projet.

II-C - Clang-Format

Pour aller encore plus loin dans votre expérience de développement C ou C++ dans Visual Studio Code, vous pouvez aussi installer l’extension Clang-Format. L’outil clang-format (qui doit donc être installé au préalable) permet de formater automatiquement le code afin de suivre certaines règles d’écriture. Celles-ci se définissent dans un fichier .clang-format.

Voici un exemple d’un tel fichier :

---
Language: Cpp
# BasedOnStyle:  LLVM
AccessModifierOffset: -4 # -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true # false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: true # false
AfterControlStatement: true # false
AfterEnum: true # false
AfterFunction: true # false
AfterNamespace: true # false
AfterObjCDeclaration: true # false
AfterStruct: true # false
AfterUnion: true # false
AfterExternBlock: true # false
BeforeCatch: true # false
BeforeElse: true # false
IndentBraces: true # false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman # Attach
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: "^ IWYU pragma:"
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: ".*"
Priority: 1
IncludeIsMainRegex: "(Test)?$"
IndentCaseLabels: true # false
IndentPPDirectives: None
IndentWidth: 4 #2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ""
MacroBlockEnd: ""
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left # Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
TabWidth: 8
UseTab: Never

L’extension Visual Studio Code permet alors d’exécuter l’outil de formatage, et notamment, automatiquement à l’enregistrement du fichier (cette option, « Format On Save », est à activer dans les paramètres de Visual Studio Code).

III - Autres extensions

III-A - Thèmes Visual Studio

Avec l’extension C/C++ Themes vous pouvez obtenir la coloration syntaxique de Visual Studio dans Visual Studio Code. Autrement dit, l’extension ajoute quatre thèmes pour Visual Studio Code :

- Lumineux ;

- Sombre ;

- Lumineux version Visual Studio 2017 ;

- Sombre version Visual Studio 2017.

III-B - GitLens

Par défaut, Visual Studio Code offre quelques fonctionnalités en relation avec un logiciel de suivi de version. En effet, l’éditeur permet de voir les changements effectués, de créer des commits et d’obtenir l’historique de la branche. Toutefois, ces fonctionnalités n’apportent pas tous les outils pour travailler sur un projet reposant sur Git. L’extension GitLens complète ce manque.

GitLens propose une version « communautaire » gratuite et une version Pro, payante. Certaines fonctionnalités sont accessibles uniquement avec la version Pro.

À l’installation, celle-ci ajoute deux nouvelles icônes dans la barre verticale à gauche du logiciel :

- GitLens, offrant des fonctionnalités en lien avec la globalité du projet, notamment en permettant de manipuler les pull requests directement dans Visual Studio Code ;

- GitLens Inspect, pour obtenir des informations avancées sur l’évolution du projet.

Par exemple, GitLens ajoute une indication sur l’auteur à l’origine des modifications ou encore, surligne les changements en cours sur le fichier. En laissant le curseur sur les annotations, GitLens affiche une fenêtre popup détaillant le commit à l’origine de la ligne surlignée.

IV - Conclusion

Visual Studio Code, grâce aux extensions installées, offre maintenant une expérience de développement satisfaisante pour du C et C++. Il est toujours possible de chercher dans les options pour adapter le logiciel à ses besoins.

V - Documentation

Vous pouvez retrouver une documentation complète sur le site officiel de Visual Studio Code.

VI - Remerciements

Merci à Franck Talbart et ABD-Z pour leurs suggestions. Merci également à f-leb pour sa relecture orthographique.