TL;DR
- Linux 云端编辑器
- 使用 WSL 运行
先上最简单的方法:直接使用 Linux 系统的云端编辑器自动配置环境,然后编译。操作起来没有什么技术难度,最简单、最快捷的方法。
Linux 云端C语言编译器
以 Lightly C语言在线编译器为例,开始使用后直接新建一个 C 语言项目就可以开始在线写C语言代码。如果项目代码已经写好了,也可以直接从客户端上传导入。 进入编程界面后,可以在下方的【终端】栏中输入命令,分别输入 uname -a 及 clang --version 查看 C语言在线编译器 的系统及编译器信息。 编写完代码后,直接点击右上角的 运行 按钮就可以在线编译C语言项目了。 除了使用一键运行的方法外,你同样也可以通过终端命令行输入 clang main.c,在 C语言在线编译器中将项目导出为 a.out 文件。然后,再输入 ./a.out 在终端运行。注:.out 后缀的文件是 Linux 系统的可执行文件,与 Windows 系统下的 .exe 文件类似。
编译C语言程序显然是学习 C 语言时的一门必修课,但初学 C 语言编程的时候,其实并没有必要把大力气花在环境配置上,而是更专注于编写代码、算法等更重要的部分。 很多同学在学习编程的时候,容易落入所谓的专业性、技术正确甚至是逼格这样的思维陷阱里,在安装系统、配置环境、选择编辑器、安装编译器等步骤下了大量功夫,结果还没真正开始学编程就耗尽了心力,解锁了从入门到放弃的成就。 大家在学习编程的过程中其实可以不必耻于选择更简单、时效更大的入门方式,借助C语言在线编译器等已有的工具直接从最重要的语法、算法、实操项目开始下手,然后再慢慢从这段学习过程中,一点一点地学习其中的系统、软硬件知识,而不至于虎头蛇尾。
回到正题。
C 语言在计算机科学的各类编程语言中一直具有相当高的地位,虽然后起的 Python 在数据科学、机器学习等方面已逐渐占据雄风,但这丝毫不影响曾经写出 Windows、MacOS、Linux 等我们现在使用的计算机系统,甚至 Python 的主要实施方式也是由 C 语言编写的。 作为高级语言,编译C语言的过程基本上是这样的: 在前面介绍的 C语言在线编译器一键运行的方法中,这个编译过程并不会完全体现,看起来更像是“源代码 > 编译器 > 可执行文件”这样的过程。学会编程以后,编译流程自然是绕不开的知识点,但大家也会更容易明白程序与终端之间的交互,同时也更容易理解这几个流程之间的关系。
Windows Subsystem for Linux (WSL)
适用于 Linux 的 Windows 子系统(Windows Subsystem for Linux, WSL)可以让开发者在 GNU/Linux 环境下运行项目,而免去双系统、虚拟机等设置。在 WSL 下,你可以选择自己想要的 GNU/Linux 版本,然后借助 vim、emacs 等工具运行 Javascript、Python、C/C++、Rust、Go 等不同的编程语言。WSL 也可以让用户类 Unix 命令行下启用 Windows 应用,同时在 Windows 系统下启动 GNU/Linux 应用。
什么是 GNU?
GNU 是一个自由的操作系统,其内容软件完全以 GPL 方式发布。这个操作系统是 GNU 计划的主要目标,名称来自 GNU's Not Unix! 的递归缩写,因为 GNU 的设计类似 Unix,但它不包含具著作权的 Unix 代码。—— 来源维基百科
WSL 的安装方式可以直接查看微软的官方安装文档:安装 WSL | Microsoft Docs
安装
- 安装好 WSL 后,安装 Visual Studio Code 并在应用商店下载 C/C++ 插件。
- 运行 WSL 并输入以下命令,安装 C 语言编译器。如果需要安装 C++ 编译器或调试工具,还可以将 gcc 替换为 g++(C++ 编译器)或 gdb(调试器)。
sudo apt-get update
sudo apt install gcc
sudo apt-get install build-essential gdb
创建项目文件
在 WSL 中创建项目文件夹 projects,然后再创建子文件夹 helloworld。除此之外,我们还需要再 Windows 下创建一个名为 helloworld 的文件夹。
mkdir projects
cd projects
mkdir helloworld
配置 VS Code
在 VS Code 中,同时按下 Ctrl+Shift+P 后输入 C/C++,并选择 Edit Configurations (UI)。之后,我们需要把 Compiler path 改为 /usr/bin/gcc 并把 IntelliSense mode 改为 gcc-x64。
{
"configurations": [
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
在 VS Code 转入 View > Command Palette > Configure Default Build Task > Create tasks.json file from template > Others,在弹出的 tasks.json 中粘贴下面的内容并把
{
"version": "2.0.0",
"version": "2.0.0",
"windows": {
"options": {
"shell": {
"executable": "bash.exe",
"args": ["-c"]
}
}
},
"tasks": [
{
"label": "build on WSL",
"type": "shell",
"command": "g++",
"args": [
"-g",
"-o",
"/home/<linux user name>/projects/helloworld/helloworld.out",
"'${relativeFileDirname}/${fileBasename}'"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
},
{
"label": "run on WSL",
"type": "shell",
"command": "/home/<linux user name>/projects/helloworld/helloworld.out",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": [
"$gcc"
]
}
]
}
Build on WSL 会编译项目并导出可执行的 helloworld.out 文件,而 run on WSL 则会运行已导出的可执行文件。
若要进行调试,大家可以在 json 中创建 launch.json 文件,然后复制粘贴下方的代码并替换
{
"version": "0.2.0",
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"preLaunchTask": "build on WSL",
"type": "cppdbg",
"request": "launch",
"program": "/home/<linux username>/projects/helloworld/helloworld.out",
"args": [""],
"stopAtEntry": true,
"cwd": "/home/<linux username>/projects/helloworld/",
"environment": [],
"externalConsole": true,
"windows": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "c:\\windows\\sysnative\\bash.exe",
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/c": "${env:systemdrive}/",
"/usr": "C:\\Users\\<windows username>\\AppData\\Local\\Packages\\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\\LocalState\\rootfs\\usr\\"
}
}
]
}
添加源代码
在之前先建好的 helloworld 中先创建 helloworld.cpp 或 helloworld.c 文件,然后随意编写一个简单的代码并保存:
#include<stdio.h>
int main()
int main()
{
printf("Hello world");
return 0;
}