# c99_env **Repository Path**: knowline/c99_env ## Basic Information - **Project Name**: c99_env - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-20 - **Last Updated**: 2026-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C 语言练习环境(三环境通用版) > 一个开箱即用的 C 语言练习与调试环境,配套谭浩强《C 程序设计》学习使用。 > 支持 **Cloud Studio 云端 / VSCode 本地 / CLion 本地** 三种开发环境,选一种你喜欢的即可。 > > 1. **打开项目时请选择 CMake 项目** > 2. 教学时主要使用: > - 绿色 Run 按钮运行 > - 锤子 Build 按钮构建 > - 小虫子 Debug 按钮调试 > > 这样最适合教学,也最不容易把学生卡在环境问题上。 --- ## 🚀 我该用哪个环境? | 你的情况 | 推荐环境 | 快速开始 | |---------|---------|---------| | 🌐 不想装软件 / 多设备切换 | **Cloud Studio(腾讯云)** | [→ 跳到第二章](#二快速开始怎么打开这个环境) | | 💻 习惯本地开发 / 已装 VSCode | **本地 VSCode** | [→ 跳到第二章](#二快速开始怎么打开这个环境) | | 🔧 用 JetBrains 全家桶 / CLion | **本地 CLion** | [→ 看 CLion_SETUP.md](CLion_SETUP.md) | **三种环境操作基本一样**:代码通用、编译标准一致(`-std=gnu17`)、都能断点调试。详细对照见 [ENVIRONMENT.md](ENVIRONMENT.md)。 --- ## 一、这个环境有多"通用"?先搞懂 C99/C11/C17/C23 很多同学一看到"C99、C11、C17、C23"就慌:**是不是每个版本都得学一遍?学不会怎么办?** **答案:完全不用,学一个就够,而且这个环境全都支持。** 下面用大白话讲清楚。 ### 1. 这几个名字是什么? 它们是 C 语言的**"国家标准"发布的年份代号**: | 标准 | 全称 | 你可以理解成 | |------|------|-------------| | **C99** | 1999 年标准 | 教材主要教的版本,也是我们上课的重点 | | **C11** | 2011 年标准 | 在 C99 基础上加了点"高级小工具" | | **C17** | 2017 年标准 | **C11 的"修 bug 版",没有加任何新语法** | | **C23** | 2023 年标准 | 又加了一些"写着更方便"的小功能 | ### 2. 最关键的一点:新版本"向下兼容"老版本 这是理解一切的核心 👇 > **老标准写的代码,在新标准下原样就能编译、正常运行;反过来才会出问题。** 打个你天天遇到的比方: - 📱 **新版手机系统能装老 App**:安卓 14 能正常运行给安卓 9 写的软件,但你不用为了"升级"去重写它。 - 📄 **新版 Word 能打开老文档**:Word 2021 能打开 .doc 老文件,内容一个字都不丢。 C 语言标准也是这个道理: - 你用 **C99** 写的代码 → 拿到 **C11 / C17 / C23** 编译器下 → **照样跑,不用改一个字**。 - 所以"只懂 C99"根本不叫短板,C99 是地基,后面的版本只是在这个地基上"锦上添花"。 ### 3. 那 C11/C17/C23 到底多做了什么?(了解即可,不影响上课) - **C11**:加了泛型宏、多线程、带边界检查的函数等——**初学阶段基本用不到**。 - **C17**:**纯粹是修复 C11 的 bug,一个新语法都没加**。记住一句话:`C17 ≈ C11`。 - **C23**:加了几个"方便写法",例如: - `nullptr`(更安全的空指针写法) - `bool` 直接当关键字用(以前要 `#include `) - 二进制字面量 `0b1010`(直接写二进制) 这些都是"锦上添花",**你完全可以在学会 C99 之后,哪天有兴趣了再顺手了解一下,几分钟的事**。 ### ✅ 一句话总结 > **上课按 C99 学就够了;这个环境底层用的是 `-std=gnu17`(C17 档,比 C99 更新、又极其稳定),所以你写的 C99 代码百分百能跑,还能顺便兼容教材里偶尔出现的更新写法。学一个版本,通吃四个标准——这就是它"通用且强大"的地方。** --- > **注意**:本节适用于 **Cloud Studio / VSCode**。CLion 用户请看 [CLion_SETUP.md](CLion_SETUP.md)。 ## 二、快速开始:怎么打开这个环境? 1. 登录 [Cloud Studio](https://cloudstudio.net)。 2. 点击 **「从 Git 仓库导入」**。 3. 粘贴本仓库地址:`https://github.com/brookecoming/cloudstudio_c99_env.git`。 4. 等待环境自动启动(第一次会稍慢,属正常)。 5. 打开 `main.c`,点右上角 **▶ 运行按钮**,或按 **F5**,就能看到输出。 --- ## 三、三种运行方式(按习惯任选) ### 方式 1:点运行按钮 / 按 F5(最常用) 打开任意 `.c` 文件,点右上角 **▶** 或按 **F5**,自动编译并运行,结果显示在下方终端。 ### 方式 2:F5 断点调试(想一步步看程序怎么跑) 1. 在代码行号左侧点一下,出现红点(断点)。 2. 按 **F5**,程序会在断点处停下。 3. 用调试工具栏的"单步跳过 / 步入 / 继续"逐行执行,左侧能实时看到每个变量的值。 > 调试是学编程的"透视眼",强烈建议早点用起来。 ### 方式 3:终端敲命令(进阶,理解编译过程) 打开下方终端,输入: ```bash make # 编译,生成可执行文件 main ./main # 运行(Linux 环境要加 ./) make clean # 清理,删掉生成的 main ``` 也可以直接用 gcc 手动编译单个文件: ```bash gcc -std=gnu17 -Wall -g main.c -o main ./main ``` > 📖 **CLion 用户**:想搞懂点「▶ 运行」时那条 `cmake --build ... --target ... -j` 命令**由谁干活、每个参数什么意思、真实的 gcc 编译/链接命令长什么样**,详见 [构建命令详解.md](构建命令详解.md)。 ### 附:导入仓库后,一键装扩展、调出运行箭头 ▷ 本地 VSCode 里编辑器右上角那个 **▷ 运行箭头**,是**扩展**画的,不是仓库配置画的。 本仓库已通过 `.vscode/extensions.json` 把需要的扩展设为**工作区推荐**: 1. 导入仓库后,IDE 一般会**弹出提示**或在扩展面板**高亮"推荐扩展"**,点「安装」即可; 2. 若没弹提示,就手动到扩展面板搜下面两个 id 安装: - `ms-vscode.cpptools`(C/C++:▷ 运行 + F5 断点调试) - `formulahendry.code-runner`(Code Runner:纯网页可用的 ▷ 一键运行) 3. 装完重载窗口,打开 `main.c`,右上角就有 **▷**,点它或按 F5 即可运行/调试。 > 说明:出于安全,IDE 不允许仓库"静默强制"装扩展,所以是"导入 → 点一下安装"这一气呵成,而非完全无人值守。 > `.vscode/settings.json` 已把 Code Runner 配成用 `-std=gnu17` 编译、并在终端运行(支持 `scanf` 输入)。 ### 进阶:看见内存——堆区 / 栈区可视化 先说清楚:**VSCode 并没有一个主流的"自动画 C 堆栈图"插件**。但有三条路能让你真正"看见"内存: 1. **F5 调试面板(最真实)**:装好 C/C++ 扩展后按 F5 调试, - 左侧「**变量 / 监视**」面板 = **栈上局部变量**的实时值; - 「**调用堆栈**」面板 = 函数一层层压栈的过程; - 「**内存(Memory)**」视图 = 按地址看原始字节。 技巧:在代码里 `printf("%p\n", &x);` 打印变量地址,把该地址填进内存视图,就能亲眼看到栈/堆里存的字节。 2. **Hex Editor 插件**(已加入推荐):以十六进制查看文件/二进制的原始字节,理解"数据在内存里长什么样"。 3. **网页版 C Tutor(零安装、画方框图最直观)**: 把 C 代码的**栈区/堆区画成方框图**并逐步执行,零基础最好懂,建议配合使用。 **堆 vs 栈 一句话区分**: - **栈(stack)**:函数里的局部变量,进函数自动分配、出函数自动释放,地址通常较高; - **堆(heap)**:`malloc` 手动申请、`free` 手动释放,地址通常较低且向上增长;忘记 free 会内存泄漏。 > 这些都是"观察工具",不改变编译方式;平时练习仍按本文主流程(▷ / F5 / make)即可。 --- ## 四、目录结构 ```text cloudstudio_c99_env/ ├── .vscode/ │ ├── tasks.json # 一键编译配置(定义 gcc 用什么参数编译) │ ├── launch.json # 一键调试配置(F5 时的 gdb 断点调试行为) │ ├── extensions.json # 推荐扩展清单(导入后提示安装,调出 ▷ 箭头) │ └── settings.json # Code Runner 用 gnu17 + 终端运行(支持 scanf) ├── 0_assignment/ # 作业区:存放作业题/参考答案(预留) ├── 0_textbook_code/ # 课本代码区:教材例题源码(预留) ├── 1_demo/ # 示例合集:每个子目录一个主题,自带 README │ ├── 自定义头文件/ # 自己写 .h(放函数定义),main.c 包含使用;单编译单元可用 ▷/F5 │ │ ├── max.h # 自定义头文件:max 函数定义 │ │ └── main.c # 主程序:#include "max.h" 后调用 │ └── multifile_demo/ # 【进阶】多文件工程 + 分步编译(头文件放声明、.c 放定义) │ ├── calc.h # 头文件:函数声明 │ ├── calc.c # 实现文件:函数实现 │ ├── main.c # 主程序:调用函数 │ └── Makefile # 分步编译脚本 ├── 2_mermaid/ # 课本章节流程图/原理图(Mermaid 文本,可渲染/缩放/导出) │ ├── 第1章_编译链接运行流程.mmd │ ├── 第3章_选择结构流程图.mmd │ └── README.md # 渲染/缩放/导出说明 ├── 3_slides/ # 幻灯片(PPT):Marp Markdown 幻灯片 / 课件 PDF(预留) │ └── README.md # Markdown 渲染 / Marp / pptx转PDF 说明 ├── main.c # 入门示例源码,含 C99 特性测试 ├── Makefile # 终端 make 编译脚本 ├── 构建命令详解.md # 【CLion】点运行的构建命令逐段拆解 + 真实 gcc 命令 ├── .gitignore # 忽略编译产物 ├── .gitattributes # 统一 LF 换行符(保障 Linux 下 make 正常) ├── AGENTS.md # AI 助教身份卡(给在线 AI 设定角色) └── README.md # 本说明文件 ``` > 所有示例都在 `1_demo/` 目录,每个子目录一个主题、自带 README: > - `1_demo/自定义头文件/`:学**自己写头文件**(`.h` 里放函数定义,`main.c` 包含使用),单编译单元,可用 ▷/F5; > - `1_demo/multifile_demo/`:学**多文件工程 + 分步编译链接**(头文件放声明、`.c` 放定义),用 `make`。 --- ## 五、为什么本环境选 `-std=gnu17`?(正好卡在"甜蜜点") 有同学会问:标准这么多,为啥老师偏偏选 **gnu17**?因为它是"稳、新、通用"三者兼得的最佳平衡点: - **稳**:C17 本质是 **C11 的"纯修 bug 版"**,没加任何新语法,所以它的稳定性和 gnu11 完全一样,不会莫名其妙报错。 - **新**:名字上贴近教材提到的 C17,底层用现代编译器档位,显得环境够新、够专业。 - **通用**:100% 向下兼容,你写的 **C99 教学代码一个字都不用改**照样跑。 - **`gnu` 前缀的好处**:相比严格的 `-std=c17`,`gnu17` 保留了 GCC 的常用扩展,不会因为"严格 ISO 模式"挡住个别常用函数,新手更不容易踩坑。 **那为什么不选别的?** | 标准 | 为什么没选 | |------|-----------| | `-std=c99` | 够用,但偏"保守";严格 ISO 模式偶尔会挡住个别常用写法 | | `-std=gnu11` | 一样稳,只是名字不如 gnu17 贴近教材的"新" | | **`-std=gnu17`** | ✅ **就它**:稳(等同 C11)+ 新(贴近 C17)+ 通用(兼容 C99) | | `-std=gnu23` | ⚠️ 云端 gcc 13 不认 `gnu23` 这个名字(要写 `gnu2x`),且 C23 支持不全、还把 `bool`/`nullptr` 变成了关键字,容易冲突 → 有编译失败风险,教学也用不上 | > 一句话:**gnu17 = gnu11 的稳定性 + 更现代的名字,零风险,所以"正好"。** ### 想自己切换标准试试?(进阶) 把编译参数改一下即可: - 改 `.vscode/tasks.json` 里 `args` 中的 `"-std=gnu17"`; - 或改 `Makefile` 里 `CFLAGS = -std=gnu17 ...`。 可选值:`-std=c99`、`-std=gnu11`、`-std=gnu17`、`-std=gnu2x`(C23 实验档,取决于 gcc 版本)。 > 提醒:切换标准只是"尝鲜"。**平时练习和作业,保持默认的 gnu17、写 C99 风格的代码最稳妥。** --- ## 六、AI 助教:给 Cloud Studio 在线 AI 一个身份 Cloud Studio 自带在线 AI。本仓库通过 **`AGENTS.md`** 给它设定了一个**「C 语言教学助教」**身份,让它能:解释你的代码、查错纠错、把报错翻译成人话。 **两种启用方式:** 1. **自动**:若 Cloud Studio 的 AI 支持读取项目规则文件,打开仓库即自动采纳 `AGENTS.md` 的身份; 2. **手动(保底)**:若它不自动读,打开 `AGENTS.md`,全选复制,粘贴到该 AI 的「自定义指令 / 角色设定 / System Prompt」框,保存后即可。 **这个助教被约定为:** - 只讲 **C99/gnu17 范围内**的内容,不超纲; - 报错按「报错原文 → 人话原因 → 怎么改 → 怎么防」四段讲清; - **先引导、后给答案**,纠错给最小修复,不直接替你写作业; - 内置本环境**常见坑清单**(`conio.h`/`getch` 不支持、Makefile 要 Tab、漏 `.o`、scanf 要终端等),报错时优先排查。 > 想改助教的性格/口径?直接编辑 `AGENTS.md` 再推送即可,全仓库学生同步生效。 --- ## 七、常见问题(FAQ) **Q1:我写的代码在别处能跑,在这里报错?** 先检查是不是漏了 `#include`,或用了非标准函数(如老教材里的 `conio.h`、`getch()`、`clrscr()`——这些是上古 Turbo C 的东西,现代 Linux/gcc 环境不支持,和标准无关)。 **Q2:`make` 报错 `missing separator`?** 说明 `Makefile` 里命令行开头的缩进被改成了空格。**Makefile 的命令行必须用 Tab 键缩进**,不能用空格。 **Q3:中文输出乱码?** 本环境是 Linux + UTF-8,一般正常。若乱码,确认源文件以 UTF-8 编码保存。 **Q4:一定要联网吗?** 是。Cloud Studio 是云端环境,编译运行都在云上完成,需要联网,但对你电脑配置几乎没要求。 --- ## 八、mermaid 章节流程图(在线渲染 / 缩放 / 导出) `2_mermaid/` 目录按章节存放课本流程图/原理图(Mermaid 纯文本,能进 Git、能改)。 - **渲染**:装推荐扩展 **Mermaid Editor**(`tomoyukim.vscode-mermaid-editor`),打开 `.mmd` 即实时预览;嵌在 `.md` 里的图由 `bierner.markdown-mermaid` 在 Markdown 预览渲染。 - **缩放**:预览内用 VS Code 窗口缩放 `Ctrl +` / `Ctrl -`;或导出 **SVG** 后本地无限放大不失真。 - **下载到本地**:Mermaid Editor 预览面板有**导出 PNG / SVG** 按钮。 - **零安装保底**: 粘贴 `.mmd` 内容即渲染/缩放/导出。 > 每章一个 `.mmd`,命名如 `第3章_选择结构流程图.mmd`;详见 `2_mermaid/README.md`。 --- ## 九、Markdown 渲染 与 PPT/幻灯片 - **Markdown**:内置预览 `Ctrl+Shift+V` 即可渲染(无需插件);增强装 `Markdown Preview Enhanced`(公式/导出 PDF/HTML)。 - **PPT 路线 A(推荐)**:用 **Marp**(`marp-team.marp-vscode`)把幻灯片写成 Markdown(见 `3_slides/`),实时分页预览,可**导出 PPTX/PDF/HTML**。 - **PPT 路线 B(现成 .pptx)**:网页 IDE 渲染 `.pptx` 支持差;用 Office/WPS **转成 PDF** 放仓库,装 **PDF** 插件(`tomoki1207.pdf`)在线看。 > 详见 `3_slides/README.md`。 --- 祝你学习顺利,编程愉快!🎓