C介绍

最近想重温下C语言,于是便有了本篇,本篇会持续更新,保证时效性和可用性。部分内容会做一些摘抄。

环境介绍

  • 编辑器:VS Code
  • 插件:C/C++、Code Runner(可以不要,一般用后面的)、C/C++ Extension Pack、C/C++ DevTools
  • 操作系统版本:Windows 11
  • 包管理器:scoop

Windows下开发C/C++的方案介绍

目前在Windows上开发C/C++主要方案是MSVCGCC或者MinGW-w64Clang/LLVM

MSVC:

  • 定位:Windows 原生 C++ 开发的首选,游戏、商业软件、大型桌面应用的不二之选。

  • 优势

    • 与 Windows API 深度集成,兼容性最优。
    • 调试器、Profiler、IntelliSense 全家桶,开发体验流畅。
    • 对 C++ 新标准跟进及时。
  • 短板

    • 对纯 C 标准(如 C99/C11)支持不完整。
    • 安装体积庞大,跨平台项目可能需要适配。
  • 无脑安装
    访问 Visual Studio → 下载 Community 版 → 安装时勾选“使用 C++ 的桌面开发”。(用Rust开发桌面应用也需要这个)

  • 适用场景:Windows 原生应用、游戏开发、企业级软件。

GCC:

  • 定位:开源世界的编译器标杆,纯 C 及跨平台项目的可靠选择。

  • 优势

    • 语言标准兼容性极佳,尤其纯 C 支持稳健。
    • 与 POSIX 环境无缝兼容。
    • 搭配 UCRT(Universal C Runtime)可避免运行时冲突。
  • 短板

    • Windows 官方构建安装较为复杂,但社区版(如 WinLibs)已完美解决。
  • 无脑安装
    访问 WinLibs → 下载 ​​POSIX线程 + UCRT + x64​​ 版本 → 解压并添加 bin 目录到 PATH。

  • 适用场景:纯 C 项目、嵌入式开发、Linux 跨平台移植。

MinGW-w64(GCC移植Windows的另一种方式,二选一即可):

  • 定位:开发 Linux/Windows 跨平台代码、喜欢 VS Code 或轻量级配置,或者熟悉 Linux 的 gcc 命令,首选 MinGW-w64。

  • 优点: 开源免费、轻量级、完全兼容 GCC 特性、方便结合 IDE 如 CLion 或 VS Code 使用。

  • 缺点: 对部分复杂的 Windows API 支持可能不及 MSVC,且需要自行配置环境变量。

  • 适用场景: 跨平台项目开发、轻量级学习与开发、配合开源IDE、GCC用户。

Clang/llvm

  • 定位:错误信息友好、链接速度极快的下一代工具链。

  • 优势

    • 诊断信息清晰易懂,开发体验更佳。
    • LLD 链接器速度领先,LLDB 调试器功能强大。
    • 模块化设计,对 C++20/23 等新特性支持良好。
  • 适用场景:现代 C/C++ 项目、代码质量要求高、工具链定制化需求强的场景。

安装并配置C/C++开发环境

下载并安装编译器

1
2
3
4
5
# 安装 GCC
scoop install mingw
# 验证安装
gcc --version
gdb --version
1
2
3
4
5
# 下载Visual Studio和C++
https://visualstudio.microsoft.com/zh-hans/vs/features/cplusplus/
# 选择社区版
# 双击安装后,确认选中 使用C++的桌面开发,我的安装目录
# D:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools\VC\Tools\MSVC\14.50.35717\bin\Hostx64\x64
1
2
3
4
5
6
7
# 安装 LLVM (包含 Clang 编译器)
scoop install llvm

# 验证安装
clang --version

# 我没有选择这个模式,就不多做介绍了

配置到VS Code

1
2
3
4
# 1.在VS Code中,按下ctrl + shift + p
# 2.输入c/c++,找到 C/C++编辑配置(UI)
# 3.打开配置界面后,找到编译器路径,将其改为你自己的安装路径:D:\scoop\apps\mingw\current\bin\gcc.exe
# 4.将IntelliSense模式 修改为 windows-gcc-x64
1
2
3
4
# 1.在VS Code中,按下ctrl + shift + p
# 2.输入c/c++,找到 C/C++编辑配置(UI)
# 3.打开配置界面后,找到编译器路径,将其改为你自己的安装路径:D:/Program Files (x86)/Microsoft Visual Studio/18/BuildTools/VC/Tools/MSVC/14.50.35717/bin/Hostx86/x86/cl.exe
# 4.将IntelliSense模式 修改为 windows-msvc-x64

从学习的角度来说,GCC完全够用,且配置比较简单。

修改完成后,在运行时,会自动在项目目录下创建一个.vscode目录,里面有个tasks.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "gcc.exe",
"args": [
"-fdiagnostics-color=always", // 开启彩色错误提示
"-g", // 生成调试信息 (方便 F5 调试)
"${file}", // 当前打开的源文件
"-o", // 指定输出标志
"${fileDirname}\\${fileBasenameNoExtension}.exe", // 输出的 exe 路径
"-fexec-charset=GBK" // 关键:解决 Windows 控制台输出中文乱码
],
"options": {
"cwd": "${fileDirname}" // 在当前文件夹运行编译命令
},
"problemMatcher": [
"$gcc" // 使用 GCC 的错误解析器
],
"group": {
"kind": "build",
"isDefault": true // 设为默认生成任务 (Ctrl+Shift+B)
},
"detail": "build cpp"
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cl.exe 生成活动文件",
"command": "cl.exe",
"args": [
"/Zi",
"/EHsc",
"/nologo",
"/Fe${fileDirname}\\${fileBasenameNoExtension}.exe",
"${file}",
"/utf-8"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$msCompile"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: cl.exe"
}
],
"version": "2.0.0"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"version": "0.2.0",
"configurations": [
{
"name": "C++运行",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"logging": {
"engineLogging": false,
"programOutput": true,
"exceptions": false,
"moduleLoad": false,
"trace": false,
"traceResponse": false,
"processExitMessages": false // 隐藏“进程已退出”提示
},
"preLaunchTask": "build cpp"
}
]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
"version": "0.2.0",
"configurations": [
{
"name": "C++运行",
"type": "cppvsdbg", //注意这里
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"logging": {
"engineLogging": false,
"programOutput": true,
"exceptions": false,
"moduleLoad": false,
"trace": false,
"traceResponse": false,
"processExitMessages": false // 隐藏“进程已退出”提示
},
"preLaunchTask": "编译器: cl.exe"
}
]
}

第一个C语言程序

环境配置好以后,可以通过一个例子来测试,在我人生中,这个例子第一次运行还是在2010年。

1
2
3
4
5
6
7
8
9
10
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <windows.h> // 必须包含这个头文件

int main()
{
printf("Hello, World!\n");
return 0;
}

此时会输出:

1
2
3
4
[Running] cd "d:\ClanProject\hello-c\" && gcc main.c -o main && "d:\ClanProject\hello-c\"main
Hello, World!

[Done] exited with code=0 in 1.341 seconds

不如为何,个人感觉MSVC运行起来更快一点。