一、环境配置

Step1 安装VScode

安装VsCode,官网下载地址:Visual Studio Code

 完全卸载VScode

①首先进行简单的卸载;

②删除C:\Users下的.vscode文件夹

删除C:\Users\AppData\Roaming下的Code文件夹

Step2 安装MinGW

①安装MinGW编译器

官网:MinGW-w64

软件下载:WinLibs - GCC+MinGW-w64 compiler for Windows

如果下载速度较慢也可在此处下载: https://download.csdn.net/download/hfy1237/87802657

 MinGW版本:

  • x86_64-posix-sjlj
  • x86_64-posix-seh
  • x86_64-win32-sjlj
  • x86_64-win32-seh
  • i686-posix-sjlj
  • i686-posix-dwarf
  • i686-win32-sjlj
  • i686-win32-dwarf

注意:

在使用32位编译器(i686)时,你所使用的第三方库也必须时32位;

在使用64位编译器(x86_64)时,你所使用的第三方库也必须时64位;

  • DWARF:一种带调试信息的包, 所以比一般的包尺寸大,仅支持32位系统。dwarf 的性能要优于 sjlj。
  • SJLJ:跨平台,支持32、64位系统,稳定性好。缺点是:运行速度稍慢,GCC不支持。sjlj支持32、64两种编译,需加-m32或-m64参数。
  • SEH:性能较好,调用系统机制处理异常,支持32,64位系统,缺点是:GCC不支持。

  • posix: 开发 Linux、Unix、Mac OS 等操作系统下的程序,启用了C++ 11 多线程特性。
  • win32: 开发 Windows 程序,未启用C++ 11 多线程特性。

②将MinGW的bin文件夹添加到系统的PATH环境变量。

PATH环境变量的目的是指定命令的搜索路径,方便当前程序寻找指定的运行程序。

 ③打开Windows的命令行窗口,输入以下代码测试:

gcc --version
g++ --version
gdb --version

如何无法执行上述三个命令请检查是否正确配置环境变量。 

Step3 安装C/C++扩展

打开VSCode软件,安装C/C++扩展,如下图所示:

二、使用方法

①创建一个新的文件夹用于保存项目相关文件,本文为MyProject;

②在VScode中打开此文件夹(快捷键Ctrl+K+O)

 

③在工作空间根目录下创建子文件夹src用于保存源代码文件;

④在src文件夹下创建新的文件main.c,并复制下面的内容到文件中;

#include <stdio.h>
 
int main()
{
    /* 我的第一个 C 程序 */
    printf("Hello, World! \n");
 
    return 0;
}

 ⑤点击左上角的播放按钮;

⑥选择gcc;

⑦选择“Run and Debug”,继续选择“C++(GDB/LLDB)”;

三、配置文件说明

1. tasks.json

此文件主要是告知VScode如何构建(编译)源代码,用于编译设置

打开方法:在命令面板输入tasks,选择如下如下红色矩形部分,即可打开task.json文件。

参数说明
参数名功能

type

编译环境类型。
label当前任务名,可自行设置。
args编译选项,包括所的编译文件、保存编译文件的目录等。

command

编译器所在的绝对路径。

options-cwd

编译器所在目录

任务构建快捷键:Ctrl + Shift + B

构建完成后可输入:.\可执行程序  运行

说明:

  • 修改 "${file}" "${workspaceFolder}\\*.c" 可构建当前工作区的所有文件。
  • 修改 "${fileDirname}\\${fileBasenameNoExtension}.exe""${workspaceFolder}\\MyExe.exe" 可将编译输出的文件硬编码为 MyExe.exe

2. launch.json

此文件主要主要是告知VScode如何调试程序,用于自定义调试

打开方法:按照下图所示步骤可打开launch.json文件。

参数说明
参数名功能
name调试任务名称
type调试环境的具体类型 nodejavacppdbg 等等
program被调试可执行文件的绝对路径
args程序调试时,传递给程序命令行的参数

stopAtEntry

调试时,是否暂停在程序的入口处

cwd

调试程序时的工作目录,一般为工作空间

externalConsole

是否在控制台显示
MIMode指示MIDebugEngine将连接的控制台调试器。允许的值是 "gdb""ldb"。

miDebuggerPath

到MI调试器(如gdb)的路径。当未指定时,它将首先搜索调试器的路径。
preLaunchTask代表的是在调试之前要执行的任务,必须与tasks.json的label对应。

request:调试模式,一共有两种模式。

  • launch:和应用一起启动。
  • attach:在已启动的应用基础上附加调试器。

启动调试的方式:

  • F5
  • Run → Start Debugging
  • 单击左侧调试图标 → 单击绿色调试图标

3. c_cpp_properties.json

此文件用于配置编译器、头文件路径、C\C++标准(默认C\C++17)等。

打开方法:进入命令面板(Ctrl + Shift + P),输入:edit,如下:

顶层属性
参数名功能
env用户自定义变量
configuration定义编译器、头文件、C\C++标准
versionc_cpp_properties.json文件版本,不可修改。
configuration属性
参数名功能
compilerPath编译器的完整路径
intelliSenseMode指定intelliSense的模式
includePath指定包含头文件的目录
cStandard指定C语言标准的版本
cppStandard指定C++语言标准的版本

4. 预定义变量(Predefined variables)说明

  • ${userHome} - 计算机用户文件夹路径
  • ${workspaceFolder} - VScode中打开的文件夹路径
  • ${workspaceFolderBasename} - 在VScode中打开的文件夹名称
  • ${file} - 当前打开的文件
  • ${fileWorkspaceFolder} - 当前打开文件的工作空间文件夹
  • ${relativeFile} - 相对于workspaceFolder的当前打开文件
  • ${relativeFileDirname} - 当前打开的文件相对于工作空间的目录名
  • ${fileBasename} - 当前打开文件名
  • ${fileBasenameNoExtension} - 当前打开文件的基本名称,不包括文件扩展名
  • ${fileDirname} - 当前打开文件的路径
  • ${fileExtname} - 当前打开文件的扩展名
  • ${cwd} - 启动VScode时,任务运行期的当前工作目录
  • ${lineNumber} - 当前选定活动文件中的行数
  • ${selectedText} - 当前活动文件选择的文本
  • ${execPath} - 正在运行VScode可执行文件的路径
  • ${defaultBuildTask} - 默认构建任务的名称
  • ${pathSeparator} - 操作系统用来分隔文件路径中的组件的字符
  • ${env:Name} - 计算机的环境变量

例如:

当前被打开的文件路径:/home/your-username/your-project/folder/file.c

工作空间根目录:/home/your-username/your-projec

预定义变量对应值如下:

  • ${userHome} -/home/your-username
  • ${workspaceFolder} -/home/your-username/your-project
  • ${workspaceFolderBasename} -your-project
  • ${file} -/home/your-username/your-project/folder/file.c
  • ${fileWorkspaceFolder} -/home/your-username/your-project
  • ${relativeFile} -folder/file.c
  • ${relativeFileDirname} -folder
  • ${fileBasename} -file.c
  • ${fileBasenameNoExtension} -file
  • ${fileDirname} -/home/your-username/your-project/folder
  • ${fileExtname} -.c
  • ${lineNumber} - 光标的行号
  • ${selectedText} - 在代码编辑器中选择的文本
  • ${execPath} - Code.exe 的位置
  • ${pathSeparator} -/在 macOS 或 linux 上,\在 Windows 上

4. 配置方式一 

此配置方式将生成的二进制文件放入工作空间下的指定文件夹build中,你也可修改build名称。

tasks.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "gcc编译并运行",
            "command": "D:\\A\\MinGW64\\bin\\gcc.exe",//此处为你的gcc.exe路径
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}", 
                "-o",
                "${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: gcc.exe 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\A\\MinGW64\\bin\\gdb.exe", //此处为你的gdb.exe路径
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "gcc编译并运行"
        }
    ]
}

5. 配置方式二

此配置方式适用于包含第三方库的使用,主要对tasks.json文件进行修改即可。

tasks.json 文件中的 args 参数添加两个路径,如下图所示:

完整 tasks.json 文件内容如下:

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "g++.exe build active file",
            "command": "D:\\mingw64\\bin\\g++.exe",  /*此处设置为你的编译器路径*/
            "args": [
                "-g",
                "${file}",
                "-L'F:\\Project\\SP++3.0\\lib'", /*注意,此行指定库的lib目录,默认没有*/
                "-I'F:\\Project\\SP++3.0\\include'", /*此处指定库的include目录,默认没有*/
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "D:\\mingw64\\bin" /*此处设置你编译器路径的bin目录下*/
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

 注意:快捷键F5和播放按钮使用不同的配置执行代码。

6. 多文件编译

多文件编译时,在tasks.json 文件下的 "args" --> "-g" 参数后添加指定的文件,并用逗号分隔即可,实例如下:

"-g",
"${workspaceFolder}\\src1\\*.c",
"${workspaceFolder}\\src2\\*.c",
"${workspaceFolder}\\src3\\*.c",

四、gcc参数解读

gcc带不同参数的含义:"-g"产生调试信息,"-c"编译中间目标文件,"-I"指定链接库,"-o"生成指定命名的可执行文件。

GCC Releases- GNU Project

五、常见问题解决

1. 执行代码控制台闪退问题的解决

 方法一

修改 launch.json 文件中的 "externalConsole" 为 false

"externalConsole":false,

方法二

在主程序最后添加 system("pause");

system("pause");

方法三

在主程序最后添加 getchar();

getchar();

2. 乱码解决

方法一

增添头文件<windows.h>并调用API函数SetConsoleOutputCP(65001)

方法二

更改VScode的编码格式为GBK,或者也可以将源代码文件用记事本打开并另存为ANSI编码格式。

 

方法三

修改VScode的setting.json配置文件,统一为一种编码格式即可。

方法四

Windows (中文) 默认的字符集是 Windows-936 (GBK),而 GCC 编译器默认编译的时候是按照 UTF-8 解析的,当未指定字符集时一律当作 UTF-8 进行处理,于是造成乱码。因此在GCC编译时添加以下参数即可解决。

-fexec-charset=gbk

-finput-charset=gbk

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐