C介绍
最近想重温下C语言,于是便有了本篇,本篇会持续更新,保证时效性和可用性。部分内容会做一些摘抄。
环境介绍
- 编辑器:VS Code
- 插件:C/C++、Code Runner(可以不要,一般用后面的)、C/C++ Extension Pack、C/C++ DevTools
- 操作系统版本:Windows 11
- 包管理器:scoop
Windows下开发C/C++的方案介绍
目前在Windows上开发C/C++主要方案是MSVC、GCC或者MinGW-w64、Clang/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
安装并配置C/C++开发环境
下载并安装编译器
1 2 3 4 5
| scoop install mingw
gcc --version gdb --version
|
1 2 3 4 5
| https://visualstudio.microsoft.com/zh-hans/vs/features/cplusplus/
|
1 2 3 4 5 6 7
| scoop install llvm
clang --version
|
配置到VS Code
从学习的角度来说,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", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe", "-fexec-charset=GBK" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$gcc" ], "group": { "kind": "build", "isDefault": true }, "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运行起来更快一点。