You can read the updated article on my blog here
By the end of this short guide you’d be able to run, debug and get intelliSense for C/C++ files in VSCode. Though, this guide is focused for Windows platform but can be extended to Mac and Linux with some minor changes.
I extensively used C & C++ in my competitive programming years and wanted a better support for debugging & intellisense. Only options available were Dev-C++(outdated) and the original "Mammoth" Visual Studio.
Lately, I found VScode and fell in love with it (Atom also only till I found VScode). I tweaked around and set it up as complete IDE For small C, C++ projects especially geared towards competitive programming.
Create a sample C/C++ project
- Open/Create an empty folder in VSCode.
- Create a new.cpp file inside it like below:
#include \<iostream\>
using namespace std;
int main()
{
cout \<\< "Hello World" \<\< endl;
// uncomment below line to stop cmd from exiting immediately in case of "externalConsole": true
//system("pause");
return 0;
}
- Install recommended C/C++ extension in VSCode and reload.
Install C/C++ Compiler
C/C++ extension does not include a C++ compiler. So, you will need to install one or use which is already installed on your computer.
Windows: Download MinGW64.zip (latest release) and extract it to the C Drive.
Mac: XCode
Linux: GCC
Also, Make sure to add C++ compiler PATH to environment variable of your platform. For Windows MinGW64 add: C:\MinGW64\bin
Enable IntelliSense
UPDATE: No configuration required in latest release, IntelliSense is enabled by default :)
Run and Debug C/C++ Code
You’ll notice that there is also a .vscode folder in your sample project. To configure ‘debug configuration’ 2 files are required launch.json and tasks.json inside .vscode folder.
VSCode can create and auto-configure these files if we try to debug for the first time. To do that, open C++ file in VSCode and either hit F5 or go to Debug -> Start Debugging and select C++ (GDB/LLDB) then select g++.exe build and debug active file.
This should create 2 files launch.json and tasks.json in .vscode folder which should look like below (update the MinGW64 path if not correct)
Notice that I’ve added one more optional configuration g++ build & run active file in launch.json and g++ build & run in tasks.json file for purpose of also Running C/C++ code without debugging. Now you may choose which configuration to pick when you start debugging. You may remove the configuration whichever you won’t need.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false, //set to true to see output in cmd instead
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++.exe build active file"
},
{
"name": "g++ build & run active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false, //set to true to see output in cmd instead
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "g++ build & run active file"
}
]
}
tasks.json
{
"tasks": [
{
"type": "shell",
"label": "g++.exe build active file",
"command": "C:\\MinGW64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\MinGW64\\bin"
}
},
{
"type": "shell",
"label": "g++ build & run active file",
"command": "C:\\MinGW64\\bin\\g++.exe",
"args": [
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\MinGW64\\bin"
}
}
],
"version": "2.0.0"
}
externalConsole in launch.json can be set to true to see code output in cmd instead.
Restart VSCode to take effects of newly added compiler paths.
Open any C/C++ file, set some breakpoints (or not) and hit the Big Green Play Button.
(Shortcut to debug: _ **_F5** )
Tip : To hide *.exe files in the side explorer of VSCode, open settings and paste the below config:
"files.exclude": {
"\*.exe": true
}
Prefer to work in JAVA?
I’ve also added an answer here on how to run and debug Java code in VSCode.
Thanks for reading, you can also follow me on Twitter @GorvGoyl
Top comments (2)
In launch.json and tasks.json
${fileDirnam} = my local path to exe? -> ${C:/Users/User/Desktop/c_folder/
And
${fileBasenameNoExtension} = a? given standard .exe name with gcc?
Or does vscode dynamically update these variables when i run debugger?
Thanks you very much
Your article has helped me a lot