Skip to main content

第一课:环境配置

在简介中我们知道了要安装 编译器,那具体怎么安装和使用呢?

(一)Windows 环境

(1)安装

在 Windows 上安装和运行 C 语言编程环境,推荐使用 MinGW-w64 + VS Code

MinGW-w64 是一个 Windows 版本的 GCC(编译器工具包 GNU Compiler Collection),它可以让你在 Windows 上运行 C 代码,而不需要额外的 Linux 子系统。


步骤一:下载 MinGW-w64


步骤二:配置环境变量

为了在命令行中使用 gcc,需要将 MinGW-w64 添加到 系统 Path 变量

  • 在 Windows 搜索框输入 环境变量 并选择 "编辑系统环境变量"

  • 选择 系统变量 -> Path -> 点击 编辑

  • 点击 新建,输入:C:\mingw64\bin

  • 点击 确定 关闭窗口。

  • 测试 gcc 是否安装成功。

    • 打开 命令提示符(CMD)PowerShell,输入:
    gcc --version
    • 如果输出如下信息,说明安装成功:
    gcc (MinGW-w64) 11.2.0

(2)编译运行

使用记事本、VS Code 或任何编辑器,创建 hello.c

#include <stdio.h>

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

进入到保存文件所在的目录。在 命令行 运行:

gcc hello.c -o hello.exe

命令解释:

  • gcc hello.c 👉 编译 hello.c
  • -o hello.exe 👉 输出 hello.exe 可执行文件(默认是 a.exe

如果没有错误,它会生成 hello.exe

如果是多个 c 代码的源码文件,编译方法如下:

gcc test1.c test2.c -o main.exe

test1.c 与 test2.c 是两个源代码文件。最后运行main.exe即可,注意Linux中要改成main.out


直接双击 exe 文件或者在当前目录下使用命令 ./hello.exe,你会看到输出:

Hello, World!

(3)配置 VScode

VScode 是一个开源免费的编辑器,功能非常强大,并且支持各种语言和很多插件。相当于是记事本的超级plus版。

可以直接去官网下载:Visual Studio Code - Code Editing. Redefined

使用 VScode 可以更好更方便地调试和编写代码。

  • 打开 VS Code,按 Ctrl+Shift+X,搜索 C/C++ 并安装 Microsoft 提供的扩展。

  • .vscode/ 目录下创建 tasks.json

    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "Build C Program",
                "type": "shell",
                "command": "gcc",
                "args": [
                    "hello.c",
                    "-o",
                    "hello.exe"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                }
            }
        ]
    }
    

    Ctrl+Shift+B 自动编译 C 代码

或者 可以搜索一个叫 Coderunner 的插件并安装,他可以使用快捷键 F5 自动编译并运行

如果进行过一次编译运行,在文件夹下会多出一个.vscode的文件夹,这个文件夹里面有个tasks.json的文件。 通过编辑 tasks.json文件,我们可以自定义项目中的各种任务

解释:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 生成活动文件",
            "command": "C:\\cygwin64\\bin\\gcc.exe",                    //编译工具的路径
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",                //参与编译的文件,这里还只是单个
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"     
                //编译生成的可执行文件,与代码文件同名
            ],
            "options": {
                "cwd": "C:\\cygwin64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

如果要编译多个文件,可以如下修改:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe 生成活动文件",
            "command": "C:\\cygwin64\\bin\\gcc.exe",    //注意路径是要双反斜杠的!           
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "*.c",                                  //表示并非指定某一个 .c 文件,而是当前文件夹下所有的 .c 文件
                "-o",
                "${fileDirname}\\program.exe"           //多个 .c 文件编译之后的可执行文件就是program.exe
            ],
            "options": {
                "cwd": "C:\\cygwin64\\bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

做好以上修改之后,在左侧的 运行与调试 中点击 创建launch.json文件,弹出选项中选择C++(GDB/LLDB)。然后击右下角的添加配置,在弹出的下拉菜单中选择 C/C++:(gdb)启动。

修改内容如下:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\program.exe",              //“program”后的内容是前面的tasks.json文件中的编译后产生的可执行文件
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe",  //"miDebuggerPath"后面的是安装的 MinGW-W64 的 gdb 工具的路径。
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }

    ]
}

注意:配置好之后,有时不可以使用 F5 来调试

要么点右上角的调试按钮,要么使用快捷键 ctrl+alt+N



(二)Linux 环境

我们使用 Linux虚拟机(比如 VMware 或者 Virtual Box) , 或者使用windows 自带的Linux子系统 WSL,他们使用起来没什么区别。关于WSL 的安装和使用,请看这篇文章:安装WSL

WSL(我们安装的是Ubuntu) 上安装 C 语言环境,并运行 C 代码,整个流程与原生 Linux 基本一致。

(1)安装

确保 WSL 里的 Ubuntu 是最新的:

sudo apt update && sudo apt upgrade -y

Ubuntu 预装了 GCC编译器,但如果没有,可以手动安装:

sudo apt install build-essential -y

build-essential 包含:

  • gcc 👉 C 语言编译器
  • g++ 👉 C++ 编译器(可选)
  • make 👉 用于构建项目的工具
  • libc6-dev 👉 C 标准库的头文件

安装完成后,检查 GCC 是否可用:

gcc --version

如果成功,会输出类似:

gcc (Ubuntu 11.3.0) 11.3.0

(2)编译运行

在 WSL 里,使用 nano(或 vim)创建一个 hello.c 文件:

nano hello.c

输入以下代码:

#include <stdio.h>

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

然后按 Ctrl + X,输入 Y 保存,按 Enter 退出

使用 gcc 编译:

gcc hello.c -o hello
  • gcc hello.c 👉 编译 hello.c
  • -o hello 👉 生成可执行文件 hello

如果没有错误,它会生成 hello 可执行文件。


运行生成的 hello 文件:

./hello

你应该会看到:

Hello, World from WSL!

(3)安装调试工具

如果你想用 GDB(GNU Debugger) 来调试 C 代码:

sudo apt install gdb -y

然后你可以这样调试:

gdb ./hello

输入 run 运行程序,输入 break main 设置断点。


(4)使用 VS Code 连接 WSL

WSL 直接可以把宿主机的屏幕作为输出端,因此在 WSL 的终端输入 code 可以直接打开 WSL 内部的 VScode。

和之前一样,在 VScode 中 安装插件: C/C++WSLCodeRunner

(5)远程挂载 WSL 目录

只在 Linux 中使用 命令,仍然有点不方便,可以使用 远程挂载把 WSL 的用户根目录挂载成 Windows 的一个磁盘,这样就实现了在 Windows 文件管理器中直接操作 Linux 内的目录。

详情可见 远程挂载 Linux

tip

C 语言的可执行文件可以在不同的系统运行吗?

不可以直接运行在不同系统上,因为:

  1. 编译出来的可执行文件是针对特定操作系统的:

    • Windows 编译的 .exe 不能直接在 Linux/macOS 上运行。
    • Linux/macOS 生成的 a.out 不能直接在 Windows 上运行。
  2. 如果需要跨平台运行,你需要重新编译代码,或者使用 cross-compiler(交叉编译)。