VScode配置C语言环境以及VScode中变量说明

1 编译器MinGW

1.1 MinGW简介

MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC 产生 Win32 程序
MinGW提供了一套简单方便的Windows下的基于GCC 程序开发环境。MinGW 收集了一系列免费的Windows使用的头文件和库文件;同时整合了GNU 的工具集,特别是GNU程序开发工具,如经典gcc, g++, make等。MinGW是完全免费的自由软件,它在Windows平台上模拟了LinuxGCC的开发环境,为C/C++的跨平台开发提供了良好基础支持,为了在Windows下工作的程序员熟悉Linux下的C/C++工程组织提供了条件

1.2 MinGW下载安装

1.2.1 mini包安装

windows上借助MinGW工具安装,下载地址:
迷你包按照:https://sourceforge.net/projects/mingw/(最新才更新到2021年)

在这里插入图片描述
这样下载后是一个mingw-get-setup.exe,点击运行开始安装找个路径就可以了
在这里插入图片描述
在里面找到mingw32-gcc.binmingw32-gcc-g++.bin以及mingw32-gdb.bin 第一个是c语言文件的编译器,第二个是c++的,第三个是用来调试编译后文件的。
然后点Installation->Apply Changes.

1.2.2 全量包安装

64位最新:https://sourceforge.net/projects/mingw-w64/files/(一直到2022还在更新),如下不能点击DownLoad Latest Version,这样下载下来是zip包,而是点击下面的 MinGW-W64-install.exe,才可以快速安装
在这里插入图片描述
安装时可能报错:The file has been downloaded incorrectly!
在这里插入图片描述
问题原因:产生此类的问题的原因是,使用在线安装的时候需要下载文件。由于网络原因导致下载失败,解决方案如下。
解决方法:咱们可以不使用在线安装的形式,可以直接下载安装包,然后解压缩,配置环境变量就可以了。
在这里插入图片描述
解压x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z,得到 mingw64 ,将该文件夹copy之任意处,并将路径添加到系统环境变量Path中

1.2.3 压缩包安装

还是使用全量包地址:https://sourceforge.net/projects/mingw-w64/files/,解压缩后即可直接使用
在这里插入图片描述

1.2.3.1 MinGW 各版本参数说明

MinGW 可以适应不同系统开发环境,因此有几大参数需要进行选择: VersionArchitectureThreadsException

  • Version:指的是你选择的 GCC 编译器的版本,一般建议选择最新的版本;
  • Architecture:指的是你的电脑的系统类型,i686 表示的是 32 位的系统类型,x86_64 表示的是 64 位的系统类型;
  • Threads:指的是线程模型,posixwin32
  • Exception:指的是异常处理模型。i686 系统架构有两种选择:dwarfsjljx86_64 系统架构也有两种选择:sehsjlj
1.2.3.2 posix VS win32的区别

GCC for Windows带有两个线程模型:win32posix

  • posixPortable Operating System Interface,可移植操作系统接口),是 UNIX 系统的一个 API 设计标准,很多类 UNIX 系统也在支持兼容这个标准,如 Linux 操作系统。
    posix启用 c++11/c11多线程功能。 依赖于 libwinpthreads,即使不直接调用 API,也将分发给 winpthreads
  • Win32,是 Windows 系统下一个 API 设计标准。
    win32没有C++11多线程功能

小结:win32:没有 C++ 11多线程特性;posix:支持 C ++ 11 多线程特性。
如果在 Windows 下开发 Linux 应用程序,则选择 posix;
如果开发 Windows 平台下的应用程序,就需要选择 Win32;

1.2.3.3 sjij VS seh VS dwarf

C++ 中有 try…throw…catch,当它执行这种结构时,它需要保存现场还原现场,而 sjlj,seh,dwarf 正是实现这类过程的三种方式。

  • sjlj:全称是 SetJump / LongJump,前者设还原点,后者跳到还原点。跨平台,可用于 32 位或者 64 位系统。缺点是:运行速度稍慢
  • seh:(Structured Exception Handling,结构化异常处理)是 Borland 公司的,微软买了其专利使用权,它利用了 FS 段寄存器,将还原点压入栈,收到异常时再弹出。相较而言,sjlj 是 C 标准库就有的东西,seh 在 2014 年前是有专利的,从性能上说 seh 比 sjlj 快。只用于64位系统。
  • dwarf:一种带调试信息( DWARF- 2(DW2)EH )的包, 所以比一般的包尺寸大,只支持32位系统 – 没有永久的运行时间开销 – 需要整个调用堆栈被启用,这意味着exception不能被抛出,例如Windows系统DLL。

小结:

  • x86_64 64位
    seh 是新发明的,而 sjlj 则是古老的。只用于64位系统。
    seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位和64位。
    因此,x86_64 系统架构的推荐使用 seh 的异常处理模型。
  • i686 32位
    dwarf 只支持 32 位,而 sjlj 支持 32 位或64 位,但是 dwarf 的性能要优于 sjlj。
    因此,i686 系统架构的推荐使用 dwarf 的异常处理模型。

1.3 配置MinGW的环境变量

配置如下:
在这里插入图片描述
添加到环境变量path中去
在这里插入图片描述

1.4 验证配置的MinGW

打开DOS窗口gcc -vgdb -v
在这里插入图片描述
在这里插入图片描述

1.5 下载更新包

MinGW 的包管理工具是 mingw-get,可以通过以下步骤下载新包:

  • 打开命令行窗口,进入 MinGW 的安装目录,比如 C:\MinGW\bin。
  • 输入命令 mingw-get update,更新包管理器的列表。
  • 输入命令 mingw-get install <package>,其中 <package> 是要安装的包的名称,比如 mingw32-libz。
  • 等待安装完成。

注意:有些包可能需要先安装其它依赖包,需要根据提示进行安装

2 VSCode配置

2.1 安装插件

这些插件看自己情况,还可以添加其他额外插件

2.1.1 C/C++插件

在这里插入图片描述

2.1.2 中文简体插件

在这里插入图片描述

2.1.3 CodeRunner插件

在这里插入图片描述

2.1.4 自动完成插件

在这里插入图片描述

2.2 配置json文件

在任意位置新建空文件夹,然后新建一个后缀为.c的文件,如test.c
按下F5调试(F5Ctrl+F5的区别)

  • F5:启动调试,启动目标文件并将调试器附加到目标进程中,一般用于通过加断点调试用;
  • Ctrl+F5:开始执行(不调试),启动目标文件,但不附加调试器。一般会单独出现一个运行结果界面

2.2.1 json中用到的变量

假设当前workspace的路径为:C:\Users\admin\Desktop\testworkspace文件夹下的结构如下(+表示下一层):C:\Users\admin\Desktop\test

+.vscode
++tasks.json
++launch.json
+main.cpp

  • ${workspaceFolder}:表示当前workspace文件夹路径,也即C:\Users\admin\Desktop\test
  • ${workspaceRootFolderName}:表示workspace的文件夹名,也即test
  • ${file}:文件自身的绝对路径,也即C:\Users\admin\Desktop\test\.vscode\launch.json
  • ${relativeFile}:文件在workspace中的路径,也即.vscode\launch.json
  • ${fileBasenameNoExtension}:当前文件的文件名,不带后缀,也即launch
  • ${fileBasename}:当前文件的文件名,launch.json
  • ${fileDirname}:文件所在的文件夹路径,也即C:\Users\admin\Desktop\test\.vscode
  • ${fileExtname}:当前文件的后缀,也即.json
  • ${lineNumber}:当前文件光标所在的行号
  • ${env:PATH}:系统中的环境变量

2.2.2 launch.json

按下F5VSCode会跳出一个launch.json的一个配置文件,修改这几个地方就好
选择C++(GDB/LLDB)
在这里插入图片描述

选择gcc.exe生成活动文件在这里插入图片描述

// https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
            "type": "cppdbg", // 配置类型,这里只能为cppdbg
            "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
            "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处
            "cwd": "${workspaceFolder}", // 调试程序时的工作目录
            "environment": [], // (环境变量?)
            "externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
            "MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。一般为gdb
            "miDebuggerPath": "E:\\SoftWare-C\\MinGW\\bin\\gdb.exe", // 调试器绝对路径。
            "preLaunchTask": "gcc" // 调试会话开始前执行的任务,一般为编译程序。必须与tasks.json的label相对应
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
         }
    ]
}

2.2.3 task.json

配置完launch.json后,继续F5调试报错:
在这里插入图片描述
选择第二个配置任务
在这里插入图片描述

// https://code.visualstudio.com/docs/editor/tasks
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "gcc", // 任务名称,与launch.json的preLaunchTask相对应
            "command": "gcc", // 要使用的编译器
            "args": [
                "${file}",
                "-o", // 指定输出文件名,不加该参数则默认输出a.exe
                "${fileDirname}/${fileBasenameNoExtension}.exe",
                "-g", // 生成和调试有关的信息
                "-Wall", // 开启额外警告
                "-static-libgcc", // 静态链接
            ], // 编译命令参数
            "type": "shell",
            "group": {
                "kind": "build",
                "isDefault": true // 设为false可做到一个tasks.json配置多个编译指令,需要自己修改本文件,我这里不多提
            },
            "presentation": {
                "echo": true,
                "reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never。具体参见VSC的文档
                "focus": false, // 设为true后可以使执行task时焦点聚集在终端,但对编译c和c++来说,设为true没有意义
                "panel": "shared" // 不同的文件的编译信息共享一个终端面板
            }
            // "problemMatcher":"$gcc" // 如果你不使用clang,去掉前面的注释符,并在上一条之后加个逗号。照着我的教程做的不需要改(也可以把这行删去)
        }
    ]
}

2.2.4 c_cpp_properties.json

当配置完test.c后发现,#include <stdio.h>报错,下面有红色曲线
可以在c_cpp_properties.json中配置修改
ctrl+shift+P打开Command Palette,运行C/Cpp: Edit configurations...生成c_cpp_properties.json:

{
    "configurations": [
        {
            "name": "Win64",
            "includePath": [   //主要修改的就是这一步,把MinGW的路径配置进去  **是递归查找这个文件夹下的文件
                "e:/software-c/mingw/**"  
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}

2.3 异常

2.3.1 一直运行

如果点击运行时,提示code is already running,可以在输出台里,右键选择stop code run
在这里插入图片描述

2.3.2 打开新文件会覆盖之前打开的文件

VS Code IDE 界面,通过路径 Code -> Preferences -> Settings 进入VS Code 设置。
enablePreview(选项在Workbench工作台中)搜索,然后将箭头指示的地方的对勾取消即可,再次打开文件就不会覆盖原窗口文件了

在这里插入图片描述

2.3.3 vscode运行c文件可从终端输入

选择左上角文件->首选项(preferences)->设置(settings)
在搜索中输入RunInTerminal并勾选
在这里插入图片描述
同时,launch.json中的configurations添加"externalConsole": true,

2.3.4 更改vscode终端乱码

由于win10默认的dos窗口是gbk,可以输入chcp查看
chcp码值对应编码:

  • 655001:代表UTF-8编码
  • 936 : 代表GBK编码

修改vscode或者cmd编码方法

  • 修改vscode
    • 把vscode编码修改为gbk
      在设置中搜索Encoding,修改为gbk即可
    • 修改tasks.json
      但这种方法只需要在tasks.jsonargs项下添加一行"-fexec-charset=gbk"即可
    • 可以直接在setting.json
"code-runner.executorMap":{
        "cpp":"chcp 65001 "
    }
  • 修改cmd编码为UTF-8
    • 临时修改。
      输入chcp 65001可以将当前窗口的编码形式修改为UTF-8
    • 永久修改
      打开注册表:
      win+R输入regedi
      查找 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
      右键,新建->字符串值
      命名为autorun
      点击右击修改,数值数据填写chcp 65001

3 通过vscode连接mysql

3.1 下载连接工具包

C语言调用MySQL,需要工具 Windows C Connector 下载地址:https://downloads.mysql.com/archives/c-c/
在这里插入图片描述
根据自己的MinGW来选择32位还是64位连接

注意:如果出现类似undefined reference to mysql_init@4的问题就需要调整一下Windows C Connector 文件的版本在

3.2 转换文件为libmysql.a

由于MySQL官方下载的Windows C开发包只能原生态支持CL编译器,而用GCC也并非不可,只是需要做一些额外的工作。
先下载一下MinGW工具包,下载地址是:http://prdownloads.sourceforge.net/mingw/mingw-utils-0.2.tar.gz?download
解压后,将此工具包中的bin目录加入系统环境变量的Path变量
然后,在Mysql开发包的lib目录下,即libmysql.lib和libmysql.dll的所在目录,运行如下命令,得到导出文件 libmysql.def

reimp -d libmysql.lib

然后在此目录运行MinGW GCC本身自带的命令

dlltool -k -d libmysql.def -l libmysql.a

得到我们最后需要链接的库文件libmysql.a

3.3 修改c_cpp_properties.json

3.3.1 生成文件

点击VSCode软件右下角的字样为Win32的按钮,它就是C/C++插件的配置;
在弹出的搜索框选择编辑配置(JSON);
就可以看到自动生成c_cpp_properties.json文件了
在这里插入图片描述

3.3.2 编辑文件

c_cpp_properties.json文件里的inlucdePath域里增加mysqlinclude的路径,这里主要是解决编辑器里的头文件报波浪线的问题
在这里插入图片描述

3.4 修改运行命令

需要看使用了coderunner插件,如果没用,就直接修改task.json,否则,需要修改coderunner插件中的code-runner.executorMap属性,因为coderunner插件会覆盖task.json运行命令

3.4.1 没用coderunner

按照如下方式修改
在这里插入图片描述
增加-I域-L域-I域下添加上述的mysqlinclude目录,-L域下添加上述的mysqllib目录,最后加上-lmysql

3.4.2 使用coderunner

如果使用了coderunner插件,那么就需要修改coderunner插件中的code-runner.executorMap属性

 "code-runner.executorMap": {
        "c": "cd $dir && gcc $fileName -I D:/SoftWare/SQL/MySQL/mysql-connector-c-6.1.11-winx64/include -L D:/SoftWare/SQL/MySQL/mysql-connector-c-6.1.11-winx64/lib -lmysql -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
}

3.4.3 添加libmysql.dll

Windows C Connector对应版本的lib目录下的libmysql.dll文件复制到,当前运行程序内,如下:
在这里插入图片描述

3.5 连接示例

#include <stdio.h>
#include <stdlib.h>
#include "mysql.h"

int main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

    // 初始化MySQL连接
    conn = mysql_init(NULL);
    // 连接到MySQL数据库
    if (mysql_real_connect(conn, "localhost", "root", "root", "test", 3306, NULL, 0)) {
        // 执行SQL查询
        if (mysql_query(conn, "SELECT * FROM user_info")) {
            fprintf(stderr, "SELECT query failed: %s\n", mysql_error(conn));
            mysql_close(conn);
            return 1;
        }
        // 存储查询结果
        res = mysql_store_result(conn);
        // 遍历查询结果
        while ((row = mysql_fetch_row(res))) {
           printf("Column1: %s, Column2: %s,Column3: %s,Column4: %s,Column5: %s\n", row[0], row[1], row[2], row[3], row[4], row[5]);
        }
        // 释放结果集
        mysql_free_result(res);
    } else {
        fprintf(stderr, "Connection to MySQL failed: %s\n", mysql_error(conn));
    }
    // 关闭MySQL连接
    mysql_close(conn);
    return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值