From a994dd25273b9b7fdea1bdfebb09fd409f1a2607 Mon Sep 17 00:00:00 2001 From: Juryorca <3010498997@qq.com> Date: Sun, 2 Nov 2025 21:58:49 +0800 Subject: [PATCH 01/11] addition : Prerequisite knowledge for C programming --- docs/qna/c-pre-knowledge/index.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/qna/c-pre-knowledge/index.md diff --git a/docs/qna/c-pre-knowledge/index.md b/docs/qna/c-pre-knowledge/index.md new file mode 100644 index 0000000..5514024 --- /dev/null +++ b/docs/qna/c-pre-knowledge/index.md @@ -0,0 +1 @@ +#index.md From 6c9ce6e4877d762abb7df51592b25dc49aee4876 Mon Sep 17 00:00:00 2001 From: Li Yan Ze <25803050339@m.fudan.edu.cn> Date: Thu, 6 Nov 2025 15:49:38 +0800 Subject: [PATCH 02/11] Add files via upload --- "How C\357\274\210Compiler).md" | 26 ++++++++++++++++++++++++++ Where C(editor&&ide).md | 23 +++++++++++++++++++++++ why C.md | 26 ++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 "How C\357\274\210Compiler).md" create mode 100644 Where C(editor&&ide).md create mode 100644 why C.md diff --git "a/How C\357\274\210Compiler).md" "b/How C\357\274\210Compiler).md" new file mode 100644 index 0000000..3f9dd5d --- /dev/null +++ "b/How C\357\274\210Compiler).md" @@ -0,0 +1,26 @@ +# 编译器(Compiler) +这篇文章将初步告诉你计算机如何看懂你的代码 + + +## 计算机能看懂什么 +计算机能且只能直接看懂**机器语言**,也即二进制指令集,全部由0和1组成,没有任何可读性 + +_例如:1011000000000001_(你一定不会看懂这是什么,即使你懂这些知识,你也不想对着一堆数字思考,否则你的头发或许就只剩下0或者1了) + +_对应*汇编语言*:MOV AX,1_ + +_解读:-前八位10110000是“MOV寄存器,立即数”的操作码(这是什么意思对你阅读这篇文章来说并不重要,如有不适,放心大大的跳过就好) + -后八位00000001是要存入的数字1,_ + +但是,计算机正擅长读懂这些数字,或者说,它笨到只能读懂这些数字,因此,机器语言(多么高级的名字!)是很蠢但执行速度最快的语言。 + +更重要的是:**我们所有的代码最终都必须转化为这种语言才得以执行** + +***我们需要一个工具来守卫我们的头发,我们需要它为我们免费打工翻译,是的,我们需要编译器!!!*** + + +## 编译器做了什么 + + + + diff --git a/Where C(editor&&ide).md b/Where C(editor&&ide).md new file mode 100644 index 0000000..bc212e4 --- /dev/null +++ b/Where C(editor&&ide).md @@ -0,0 +1,23 @@ +# 编辑器(Editor)&&集成开发环境(Integrated Development Environment) + +## 编辑器 +### 什么是编辑器? +编辑器(或者说是文本编辑器)本是纯文本处理工具,仅用于编写/修改代码(如VS Code、记事本、Sublime Text),没有代码分析、编译等额外功能。 +但为了方便大家编程,编辑器接入了扩展功能,使编码更加准确高效。我们称其为代码编辑器。 +- 语法高亮:按照编程语言规则(c,python,c++,java)用不同颜色标注关键字,变量,函数,使得代码更易读 +- 智能补全;基于代码规则和上下文自动提示代码片段(vscode的‘tap’代替思考) +### 常见的编辑器 +- Windows记事本/Mac文本编辑/Linux vim +- VS code/GitHub网页编辑器 +- vscode环境配置请移步至.... + + +## 集成开发环境(IDE)Dev-C++/Code::Blocks/X-code(Mac) +### 什么是集成开发环境? +集成开发环境 + + + +### 下载 + - Dev-C++(Windows)下载: + - Code::Blocks(windows)下载: diff --git a/why C.md b/why C.md new file mode 100644 index 0000000..8c3fcbe --- /dev/null +++ b/why C.md @@ -0,0 +1,26 @@ +# 为什么要学C语言 + +学C语言的核心价值,可从以下3个维度理解: + +## 一、深入理解计算机底层,建立编程底层思维 +C语言“贴近硬件”,能直接操作内存、访问硬件接口,帮你搞懂**代码如何被计算机执行**: +- 明白`int a=1;`是在内存中申请4字节空间存二进制`1`;而不只是理解为定义了一个变量 +- 理解“编译”是把代码翻译成CPU能识别的指令。 + + +## 二、适用场景广,是多领域的基础工具 +C语言在核心领域不可替代,学会后可覆盖: +- **系统开发**:Linux内核、嵌入式系统(单片机、智能设备); +- **底层软件**:编译器、MySQL数据库底层、驱动程序; +- **高性能场景**:游戏引擎(LOL,王者(准确的说是c++))、工业控制软件(依赖其执行效率)。 + + +## 三、锻炼扎实编程基本功,降低后续学习成本 +C语言语法“规则严格”(手动定义类型、管理内存),能帮你养成规范习惯: +- 关注资源效率,避免内存泄漏; +- 其流程控制(`if-else`、`for`)、函数逻辑是多语言模板,学会C后再学Python、C++更易上手。 +- 同时C语言严谨甚至繁琐的结构强迫你去简要理解计算机的工作原理 + + +简言之:做底层开发、嵌入式(微电子,电子信息工程,...)选C语言; +想打编程基础、理解计算机原理,C语言是最优跳板。 From 7b6a94663e37af3d44e8832bd02f465e56ccc688 Mon Sep 17 00:00:00 2001 From: Juryorca <3010498997@qq.com> Date: Thu, 6 Nov 2025 16:06:43 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E6=96=87=E4=BB=B6,?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/qna/c-pre-knowledge/How-C-Compiler.md | 26 +++++++++++++++++++ .../c-pre-knowledge/Where-C-editor-n-ide.md | 23 ++++++++++++++++ docs/qna/c-pre-knowledge/why-C.md | 26 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 docs/qna/c-pre-knowledge/How-C-Compiler.md create mode 100644 docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md create mode 100644 docs/qna/c-pre-knowledge/why-C.md diff --git a/docs/qna/c-pre-knowledge/How-C-Compiler.md b/docs/qna/c-pre-knowledge/How-C-Compiler.md new file mode 100644 index 0000000..3f9dd5d --- /dev/null +++ b/docs/qna/c-pre-knowledge/How-C-Compiler.md @@ -0,0 +1,26 @@ +# 编译器(Compiler) +这篇文章将初步告诉你计算机如何看懂你的代码 + + +## 计算机能看懂什么 +计算机能且只能直接看懂**机器语言**,也即二进制指令集,全部由0和1组成,没有任何可读性 + +_例如:1011000000000001_(你一定不会看懂这是什么,即使你懂这些知识,你也不想对着一堆数字思考,否则你的头发或许就只剩下0或者1了) + +_对应*汇编语言*:MOV AX,1_ + +_解读:-前八位10110000是“MOV寄存器,立即数”的操作码(这是什么意思对你阅读这篇文章来说并不重要,如有不适,放心大大的跳过就好) + -后八位00000001是要存入的数字1,_ + +但是,计算机正擅长读懂这些数字,或者说,它笨到只能读懂这些数字,因此,机器语言(多么高级的名字!)是很蠢但执行速度最快的语言。 + +更重要的是:**我们所有的代码最终都必须转化为这种语言才得以执行** + +***我们需要一个工具来守卫我们的头发,我们需要它为我们免费打工翻译,是的,我们需要编译器!!!*** + + +## 编译器做了什么 + + + + diff --git a/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md b/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md new file mode 100644 index 0000000..bc212e4 --- /dev/null +++ b/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md @@ -0,0 +1,23 @@ +# 编辑器(Editor)&&集成开发环境(Integrated Development Environment) + +## 编辑器 +### 什么是编辑器? +编辑器(或者说是文本编辑器)本是纯文本处理工具,仅用于编写/修改代码(如VS Code、记事本、Sublime Text),没有代码分析、编译等额外功能。 +但为了方便大家编程,编辑器接入了扩展功能,使编码更加准确高效。我们称其为代码编辑器。 +- 语法高亮:按照编程语言规则(c,python,c++,java)用不同颜色标注关键字,变量,函数,使得代码更易读 +- 智能补全;基于代码规则和上下文自动提示代码片段(vscode的‘tap’代替思考) +### 常见的编辑器 +- Windows记事本/Mac文本编辑/Linux vim +- VS code/GitHub网页编辑器 +- vscode环境配置请移步至.... + + +## 集成开发环境(IDE)Dev-C++/Code::Blocks/X-code(Mac) +### 什么是集成开发环境? +集成开发环境 + + + +### 下载 + - Dev-C++(Windows)下载: + - Code::Blocks(windows)下载: diff --git a/docs/qna/c-pre-knowledge/why-C.md b/docs/qna/c-pre-knowledge/why-C.md new file mode 100644 index 0000000..8c3fcbe --- /dev/null +++ b/docs/qna/c-pre-knowledge/why-C.md @@ -0,0 +1,26 @@ +# 为什么要学C语言 + +学C语言的核心价值,可从以下3个维度理解: + +## 一、深入理解计算机底层,建立编程底层思维 +C语言“贴近硬件”,能直接操作内存、访问硬件接口,帮你搞懂**代码如何被计算机执行**: +- 明白`int a=1;`是在内存中申请4字节空间存二进制`1`;而不只是理解为定义了一个变量 +- 理解“编译”是把代码翻译成CPU能识别的指令。 + + +## 二、适用场景广,是多领域的基础工具 +C语言在核心领域不可替代,学会后可覆盖: +- **系统开发**:Linux内核、嵌入式系统(单片机、智能设备); +- **底层软件**:编译器、MySQL数据库底层、驱动程序; +- **高性能场景**:游戏引擎(LOL,王者(准确的说是c++))、工业控制软件(依赖其执行效率)。 + + +## 三、锻炼扎实编程基本功,降低后续学习成本 +C语言语法“规则严格”(手动定义类型、管理内存),能帮你养成规范习惯: +- 关注资源效率,避免内存泄漏; +- 其流程控制(`if-else`、`for`)、函数逻辑是多语言模板,学会C后再学Python、C++更易上手。 +- 同时C语言严谨甚至繁琐的结构强迫你去简要理解计算机的工作原理 + + +简言之:做底层开发、嵌入式(微电子,电子信息工程,...)选C语言; +想打编程基础、理解计算机原理,C语言是最优跳板。 From 87a520cc6d61a30dc4f949e234bc2b491c74ef54 Mon Sep 17 00:00:00 2001 From: Juryorca <3010498997@qq.com> Date: Thu, 6 Nov 2025 16:10:31 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E4=B8=8D=E5=BD=93=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "How C\357\274\210Compiler).md" | 26 -------------------------- Where C(editor&&ide).md | 23 ----------------------- why C.md | 26 -------------------------- 3 files changed, 75 deletions(-) delete mode 100644 "How C\357\274\210Compiler).md" delete mode 100644 Where C(editor&&ide).md delete mode 100644 why C.md diff --git "a/How C\357\274\210Compiler).md" "b/How C\357\274\210Compiler).md" deleted file mode 100644 index 3f9dd5d..0000000 --- "a/How C\357\274\210Compiler).md" +++ /dev/null @@ -1,26 +0,0 @@ -# 编译器(Compiler) -这篇文章将初步告诉你计算机如何看懂你的代码 - - -## 计算机能看懂什么 -计算机能且只能直接看懂**机器语言**,也即二进制指令集,全部由0和1组成,没有任何可读性 - -_例如:1011000000000001_(你一定不会看懂这是什么,即使你懂这些知识,你也不想对着一堆数字思考,否则你的头发或许就只剩下0或者1了) - -_对应*汇编语言*:MOV AX,1_ - -_解读:-前八位10110000是“MOV寄存器,立即数”的操作码(这是什么意思对你阅读这篇文章来说并不重要,如有不适,放心大大的跳过就好) - -后八位00000001是要存入的数字1,_ - -但是,计算机正擅长读懂这些数字,或者说,它笨到只能读懂这些数字,因此,机器语言(多么高级的名字!)是很蠢但执行速度最快的语言。 - -更重要的是:**我们所有的代码最终都必须转化为这种语言才得以执行** - -***我们需要一个工具来守卫我们的头发,我们需要它为我们免费打工翻译,是的,我们需要编译器!!!*** - - -## 编译器做了什么 - - - - diff --git a/Where C(editor&&ide).md b/Where C(editor&&ide).md deleted file mode 100644 index bc212e4..0000000 --- a/Where C(editor&&ide).md +++ /dev/null @@ -1,23 +0,0 @@ -# 编辑器(Editor)&&集成开发环境(Integrated Development Environment) - -## 编辑器 -### 什么是编辑器? -编辑器(或者说是文本编辑器)本是纯文本处理工具,仅用于编写/修改代码(如VS Code、记事本、Sublime Text),没有代码分析、编译等额外功能。 -但为了方便大家编程,编辑器接入了扩展功能,使编码更加准确高效。我们称其为代码编辑器。 -- 语法高亮:按照编程语言规则(c,python,c++,java)用不同颜色标注关键字,变量,函数,使得代码更易读 -- 智能补全;基于代码规则和上下文自动提示代码片段(vscode的‘tap’代替思考) -### 常见的编辑器 -- Windows记事本/Mac文本编辑/Linux vim -- VS code/GitHub网页编辑器 -- vscode环境配置请移步至.... - - -## 集成开发环境(IDE)Dev-C++/Code::Blocks/X-code(Mac) -### 什么是集成开发环境? -集成开发环境 - - - -### 下载 - - Dev-C++(Windows)下载: - - Code::Blocks(windows)下载: diff --git a/why C.md b/why C.md deleted file mode 100644 index 8c3fcbe..0000000 --- a/why C.md +++ /dev/null @@ -1,26 +0,0 @@ -# 为什么要学C语言 - -学C语言的核心价值,可从以下3个维度理解: - -## 一、深入理解计算机底层,建立编程底层思维 -C语言“贴近硬件”,能直接操作内存、访问硬件接口,帮你搞懂**代码如何被计算机执行**: -- 明白`int a=1;`是在内存中申请4字节空间存二进制`1`;而不只是理解为定义了一个变量 -- 理解“编译”是把代码翻译成CPU能识别的指令。 - - -## 二、适用场景广,是多领域的基础工具 -C语言在核心领域不可替代,学会后可覆盖: -- **系统开发**:Linux内核、嵌入式系统(单片机、智能设备); -- **底层软件**:编译器、MySQL数据库底层、驱动程序; -- **高性能场景**:游戏引擎(LOL,王者(准确的说是c++))、工业控制软件(依赖其执行效率)。 - - -## 三、锻炼扎实编程基本功,降低后续学习成本 -C语言语法“规则严格”(手动定义类型、管理内存),能帮你养成规范习惯: -- 关注资源效率,避免内存泄漏; -- 其流程控制(`if-else`、`for`)、函数逻辑是多语言模板,学会C后再学Python、C++更易上手。 -- 同时C语言严谨甚至繁琐的结构强迫你去简要理解计算机的工作原理 - - -简言之:做底层开发、嵌入式(微电子,电子信息工程,...)选C语言; -想打编程基础、理解计算机原理,C语言是最优跳板。 From f125faefe4bf02c1b628702d32326e1cef946d1d Mon Sep 17 00:00:00 2001 From: Juryorca <3010498997@qq.com> Date: Thu, 6 Nov 2025 18:33:51 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修正0xb0 对应 mov al 修正一些用词问题 --- docs/qna/c-pre-knowledge/How-C-Compiler.md | 35 ++++++++++------------ 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/docs/qna/c-pre-knowledge/How-C-Compiler.md b/docs/qna/c-pre-knowledge/How-C-Compiler.md index 3f9dd5d..5af2bcd 100644 --- a/docs/qna/c-pre-knowledge/How-C-Compiler.md +++ b/docs/qna/c-pre-knowledge/How-C-Compiler.md @@ -1,26 +1,21 @@ -# 编译器(Compiler) -这篇文章将初步告诉你计算机如何看懂你的代码 - +# 编译器(Compiler) +这篇文章将初步告诉你计算机如何“看懂”你的代码。 ## 计算机能看懂什么 -计算机能且只能直接看懂**机器语言**,也即二进制指令集,全部由0和1组成,没有任何可读性 - -_例如:1011000000000001_(你一定不会看懂这是什么,即使你懂这些知识,你也不想对着一堆数字思考,否则你的头发或许就只剩下0或者1了) - -_对应*汇编语言*:MOV AX,1_ - -_解读:-前八位10110000是“MOV寄存器,立即数”的操作码(这是什么意思对你阅读这篇文章来说并不重要,如有不适,放心大大的跳过就好) - -后八位00000001是要存入的数字1,_ +计算机能且只能直接看懂**机器语言**,也就是由 0 和 1 组成的二进制指令集,几乎不可读。 -但是,计算机正擅长读懂这些数字,或者说,它笨到只能读懂这些数字,因此,机器语言(多么高级的名字!)是很蠢但执行速度最快的语言。 - -更重要的是:**我们所有的代码最终都必须转化为这种语言才得以执行** - -***我们需要一个工具来守卫我们的头发,我们需要它为我们免费打工翻译,是的,我们需要编译器!!!*** +例如: +``` +1011000000000001 +``` +用`x86_64`汇编定义的指令来解释它,是: +``` +mov al, 1 +``` +- 前八位 `10110000` 可以理解为“将立即数放到`al`寄存器”的操作码 +- 后八位 `00000001` 是要存入的数字 1。 +机器语言对人类很不友好,但cpu需要它来理解需要执行什么指令。我们(通常)不能直接使用 0/1 编程——这就是编译器存在的理由:把人能读、能写的高级语言(如 C)翻译成机器理解并执行的指令。 ## 编译器做了什么 - - - - +TODO From 5b25946c06ddc541ba21d6419f72e51213e34a01 Mon Sep 17 00:00:00 2001 From: Juryorca <3010498997@qq.com> Date: Fri, 7 Nov 2025 10:08:27 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=85=B3=E4=BA=8E=E5=AD=A6=E4=B9=A0=20C=20=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E7=9A=84=E4=BB=B7=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 对文档进行格式和内容的修改(AI审核)。 --- docs/qna/c-pre-knowledge/why-C.md | 46 +++++++++++++++++++------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/docs/qna/c-pre-knowledge/why-C.md b/docs/qna/c-pre-knowledge/why-C.md index 8c3fcbe..c798032 100644 --- a/docs/qna/c-pre-knowledge/why-C.md +++ b/docs/qna/c-pre-knowledge/why-C.md @@ -1,26 +1,36 @@ -# 为什么要学C语言 +# 为什么要学 C 语言 -学C语言的核心价值,可从以下3个维度理解: +学 C 语言的核心价值可以从以下三个维度来理解: -## 一、深入理解计算机底层,建立编程底层思维 -C语言“贴近硬件”,能直接操作内存、访问硬件接口,帮你搞懂**代码如何被计算机执行**: -- 明白`int a=1;`是在内存中申请4字节空间存二进制`1`;而不只是理解为定义了一个变量 -- 理解“编译”是把代码翻译成CPU能识别的指令。 +## 一、深入理解计算机底层 +C 语言贴近硬件,能够直接操作内存并与底层资源交互,帮助你理解代码如何被计算机执行: +- 明白 `int a = 1;` 并不仅仅是“定义一个变量”,而是在内存中为该变量分配空间并存储二进制表示(在常见的 32/64 位平台上,`int` 往往占 4 字节,但不同平台可能不同)。 +- 理解“编译”是把人类可读的源码翻译成 CPU 能执行的机器指令(或汇编),以及汇编、链接的基本流程。 +- 学会使用指针、理解栈和堆、内存管理、对齐、调用约定等底层概念,这些知识会让你在调试、性能优化和系统设计时有更直观的判断力。 -## 二、适用场景广,是多领域的基础工具 -C语言在核心领域不可替代,学会后可覆盖: -- **系统开发**:Linux内核、嵌入式系统(单片机、智能设备); -- **底层软件**:编译器、MySQL数据库底层、驱动程序; -- **高性能场景**:游戏引擎(LOL,王者(准确的说是c++))、工业控制软件(依赖其执行效率)。 +## 二、多领域的基础工具 +C 在很多核心领域仍然不可或缺,学会后能覆盖很多高价值场景: +- 系统开发:操作系统内核(如 Linux)、驱动程序、固件与嵌入式系统(单片机、智能设备)。 +- 底层软件:编译器、数据库底层实现、网络协议栈等。 +- 高性能场景:数值计算、工业控制、部分游戏引擎底层模块(多数现代大型游戏引擎使用 C++,但底层思想与性能优化与 C 密切相关)。 +- 其它:高性能网络服务、实时系统、微控制器开发等。 -## 三、锻炼扎实编程基本功,降低后续学习成本 -C语言语法“规则严格”(手动定义类型、管理内存),能帮你养成规范习惯: -- 关注资源效率,避免内存泄漏; -- 其流程控制(`if-else`、`for`)、函数逻辑是多语言模板,学会C后再学Python、C++更易上手。 -- 同时C语言严谨甚至繁琐的结构强迫你去简要理解计算机的工作原理 +学会 C 可以让你更容易进入这些领域或理解这些领域的源码与设计。 +## 三、锻炼基本功,降低后续学习成本 +C 的语法和编程风格要求你显式说明类型并手动管理资源,这会培养良好的工程习惯: + +- 关注内存与资源管理,学会发现和避免内存泄漏、悬空指针等常见问题。 +- 熟练掌握流程控制(`if`、`switch`、`for`、`while`)与函数设计,这些结构是大多数编程语言的共通模板。 +- C 的严谨性迫使你理解计算机在做什么(数据在虚拟内存中如何存储、函数调用如何进行、IO 的原理等),对这些内容的理解会让你在转学其他语言(如 Python、C++、Go、Rust)时事半功倍。 + +## 注意事项 +- C 功能强但容易出现低级错误(越界、悬指针、未定义行为等),调试难度相对较高。学习时务必养成良好的编码规范、重视调试工具使用。 +- 在现代软件工程中,选择 C 还是更高层语言应根据项目需求(开发效率 vs. 执行效率 vs. 可维护性)权衡。 + +## 简短结论 +- 如果你的目标是做底层开发、嵌入式系统、操作系统或追求高性能,学 C 是非常必要的基础。 +- 如果你想打好编程基础、理解计算机原理,C 是一块极好的跳板。 -简言之:做底层开发、嵌入式(微电子,电子信息工程,...)选C语言; -想打编程基础、理解计算机原理,C语言是最优跳板。 From 52ffcccdc4093faae5ecd4f1af125519c6256189 Mon Sep 17 00:00:00 2001 From: Li Yan Ze <25803050339@m.fudan.edu.cn> Date: Sun, 16 Nov 2025 15:27:15 +0800 Subject: [PATCH 07/11] Create FileExtionsion --- docs/qna/c-pre-knowledge/FileExtionsion | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/qna/c-pre-knowledge/FileExtionsion diff --git a/docs/qna/c-pre-knowledge/FileExtionsion b/docs/qna/c-pre-knowledge/FileExtionsion new file mode 100644 index 0000000..bac6b23 --- /dev/null +++ b/docs/qna/c-pre-knowledge/FileExtionsion @@ -0,0 +1 @@ +后缀名 From 50a56b77a646e95c5c8ba5c8a0f98c5b6b0c9088 Mon Sep 17 00:00:00 2001 From: Juryorca <3010498997@qq.com> Date: Sun, 23 Nov 2025 13:58:49 +0800 Subject: [PATCH 08/11] fix(Where-c-editor-n-ide.md): Revise editor and IDE documentation for clarity Updated the content to clarify the definitions and features of code editors and IDEs, including examples and download links. --- .../c-pre-knowledge/Where-C-editor-n-ide.md | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md b/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md index bc212e4..699535b 100644 --- a/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md +++ b/docs/qna/c-pre-knowledge/Where-C-editor-n-ide.md @@ -1,23 +1,53 @@ -# 编辑器(Editor)&&集成开发环境(Integrated Development Environment) +# 编辑器(Editor)和集成开发环境(IDE) ## 编辑器 + ### 什么是编辑器? -编辑器(或者说是文本编辑器)本是纯文本处理工具,仅用于编写/修改代码(如VS Code、记事本、Sublime Text),没有代码分析、编译等额外功能。 -但为了方便大家编程,编辑器接入了扩展功能,使编码更加准确高效。我们称其为代码编辑器。 -- 语法高亮:按照编程语言规则(c,python,c++,java)用不同颜色标注关键字,变量,函数,使得代码更易读 -- 智能补全;基于代码规则和上下文自动提示代码片段(vscode的‘tap’代替思考) +编辑器(或称文本编辑器)是用于创建与编辑纯文本的工具,主要用于编写或修改文档或者代码,例如 Windows 记事本、Vim、Sublime Text 等。为了方便编程,现代编辑器通过插件/扩展增加了许多面向开发者的功能,我们通常把具有这些扩展功能的编辑器称为代码编辑器(code editor),如 Visual Studio Code(VS Code)。 + +常见的代码编辑器功能包括: +- 语法高亮:根据编程语言的语法规则(如 `C`、`Python`、`C++`、`Java`)用不同颜色标注关键字、变量、函数等,提高可读性。 +- 插件/扩展:支持通过插件添加语言支持、调试器、格式调整、版本控制等功能。 +- 智能补全:基于语言规则和上下文自动提示代码片段、函数签名和标识符,提升编码效率。 +- 其他便利功能:Snippets(代码片段)、多光标编辑、文件树/资源管理、集成终端等。 + ### 常见的编辑器 -- Windows记事本/Mac文本编辑/Linux vim -- VS code/GitHub网页编辑器 -- vscode环境配置请移步至.... +- Windows 记事本、macOS 文本编辑(TextEdit)、Linux 下的 `vim`/`nano` 等简单文本编辑器 +- Visual Studio Code(VS Code)、Sublime Text、Cursor 等主流编辑器 + +有关 VS Code 的环境配置请移步至项目中对应的配置文档或官方文档。 +## 集成开发环境(IDE) -## 集成开发环境(IDE)Dev-C++/Code::Blocks/X-code(Mac) ### 什么是集成开发环境? -集成开发环境 +集成开发环境(Integrated Development Environment,IDE)是把编辑器、编译器/构建工具、调试器、项目/代码管理和其他开发工具集成到一个应用中的开发工具。IDE 通常为大型语言或复杂项目提供更完整的一体化支持,常见示例包括 Visual Studio、Code::Blocks、Dev-C++、Xcode、CLion 等。 +IDE 的典型特点: +- 一键构建/运行项目,集成编译器和构建系统 +- 可视化调试(断点、堆栈查看、变量监视) +- 项目/工程管理(多文件、多模块支持) +- 集成版本控制、终端和插件生态 +优点: +- 提高开发效率(尤其是大型项目) +- 调试和构建流程更为便捷、直观 + +缺点: +- 通常体积较大、占用资源多,启动和运行可能较慢 +- 配置复杂度可能高于轻量级编辑器 + +### 常见的 IDE(举例) +- Dev-C++(Windows) +- Code::Blocks(跨平台) +- Xcode(macOS) +- Visual Studio(Windows) +- CLion、NetBeans 等 ### 下载 - - Dev-C++(Windows)下载: - - Code::Blocks(windows)下载: +- JetBrains Toolbox(用于安装和管理 JetBrains 系列 IDE,例如 CLion、IntelliJ IDEA 等): + - https://www.jetbrains.com/toolbox-app/ + - https://zb.fudan.edu.cn/product.html?id=247 +- Cursor(现代 AI 辅助代码编辑器):https://www.cursor.so/ +- Visual Studio Code(VS Code):https://code.visualstudio.com/ + +其他 Editor/IDE(例如 Dev-C++、Code::Blocks、Xcode 等)请优先从其官方渠道或知名镜像下载安装包,以保证软件来源可靠并获得安全更新。 From 414016bd906ad2777b4bed935c85d81fc22439a7 Mon Sep 17 00:00:00 2001 From: Li Yan Ze <25803050339@m.fudan.edu.cn> Date: Fri, 28 Nov 2025 14:56:21 +0800 Subject: [PATCH 09/11] file extensions Added detailed explanations of C language file extensions, including core file types, intermediate products, library files, build system files, special-purpose files, platform specifications, compilation processes, and naming conventions. --- docs/qna/c-pre-knowledge/FileExtionsion | 95 ++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) diff --git a/docs/qna/c-pre-knowledge/FileExtionsion b/docs/qna/c-pre-knowledge/FileExtionsion index bac6b23..65b86d5 100644 --- a/docs/qna/c-pre-knowledge/FileExtionsion +++ b/docs/qna/c-pre-knowledge/FileExtionsion @@ -1 +1,94 @@ -后缀名 +# C语言文件后缀名详解 + +## 一、核心文件类型 + +### 1. `.c` +- **作用**:存储C语言源代码,包含函数定义、变量声明及核心逻辑 +- **编译流程**:作为编译器入口文件,触发C语言编译规则 + +### 2. `.h` +- **作用**:头文件,声明函数接口、宏定义、数据结构 +- **关键机制**:通过预处理指令实现接口声明与实现分离 + +### 3. `.exe` +- **作用**:Windows可执行文件,包含PE(Portable Executable)结构 +- **平台特性**:Linux系统无此扩展名 + +--- + +## 二、编译中间产物 + +### 4. `.o` (Linux) / `.obj` (Windows) +- **作用**:编译器生成的中间目标文件,包含机器码和符号表 +- **生成方式**:通过编译器`-c`选项生成 + +### 5. `.i` +- **作用**:预处理后的源代码文件(展开宏和头文件) +- **生成命令**:编译器预处理选项生成 + +### 6. `.s` +- **作用**:汇编代码文件,展示编译器生成的汇编指令 +- **应用场景**:性能优化分析 + +--- + +## 三、库文件类型 + +### 7. `.a` (Linux) / `.lib` (Windows) +- **作用**:静态库文件,归档多个目标文件 +- **链接方式**:编译时直接嵌入可执行文件 + +### 8. `.so` (Linux) / `.dll` (Windows) +- **作用**:动态库文件,运行时按需加载 +- **加载机制**: + - Linux通过动态链接器加载 + - Windows依赖系统路径查找 + +--- + +## 四、构建系统相关 + +### 9. `.mk` +- **作用**:Makefile文件,定义编译规则和依赖关系 + +### 10. `.d` +- **作用**:头文件依赖描述文件,记录头文件包含关系 +- **生成命令**:编译器自动生成 + +--- + +## 五、特殊用途文件 + +### 11. `.pch` / `.gch` +- **作用**:预编译头文件缓存 +- **优势**:加速大型项目编译 + +### 12. `.S` (大写) +- **作用**:预编译汇编代码文件 +- **编译方式**:支持汇编与C混合编程 + +--- + +## 六、平台标识规范 + +| 文件类型 | Linux规范 | Windows规范 | +|----------------|--------------------|--------------------| +| 可执行文件 | 无扩展名 | `.exe` | +| 目标文件 | `.o` | `.obj` | +| 静态库 | `.a` | `.lib` | +| 动态库 | `.so` | `.dll` | + +--- + +## 七、编译流程关联 +1. **预处理**:处理宏定义和头文件包含 +2. **编译**:生成汇编代码 +3. **汇编**:生成目标文件 +4. **链接**:合并生成可执行文件 + +## 八、命名规范建议 +1. **主程序**:`main.c`(程序入口) +2. **模块化开发**:功能模块用`module.c`+`module.h`配对 +3. **跨平台注意事项**: + - 避免依赖后缀名的大小写 + - 统一构建工具管理不同平台的后缀规则 From a3d9b4ae5377fb044933f46914729488fbd4f7da Mon Sep 17 00:00:00 2001 From: Li Yan Ze <25803050339@m.fudan.edu.cn> Date: Fri, 28 Nov 2025 14:56:51 +0800 Subject: [PATCH 10/11] Rename FileExtionsion to FileExtionsion.md --- docs/qna/c-pre-knowledge/{FileExtionsion => FileExtionsion.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/qna/c-pre-knowledge/{FileExtionsion => FileExtionsion.md} (100%) diff --git a/docs/qna/c-pre-knowledge/FileExtionsion b/docs/qna/c-pre-knowledge/FileExtionsion.md similarity index 100% rename from docs/qna/c-pre-knowledge/FileExtionsion rename to docs/qna/c-pre-knowledge/FileExtionsion.md From 962f1a3fe8242c07697ffb2a0f7e32a9205735f4 Mon Sep 17 00:00:00 2001 From: Li Yan Ze <25803050339@m.fudan.edu.cn> Date: Fri, 28 Nov 2025 15:09:16 +0800 Subject: [PATCH 11/11] Revise file extension documentation for C language MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后缀名的作用介绍和在不同操作系统之间的差异 --- docs/qna/c-pre-knowledge/FileExtionsion.md | 218 ++++++++++++++++----- 1 file changed, 169 insertions(+), 49 deletions(-) diff --git a/docs/qna/c-pre-knowledge/FileExtionsion.md b/docs/qna/c-pre-knowledge/FileExtionsion.md index 65b86d5..60e4298 100644 --- a/docs/qna/c-pre-knowledge/FileExtionsion.md +++ b/docs/qna/c-pre-knowledge/FileExtionsion.md @@ -1,94 +1,214 @@ -# C语言文件后缀名详解 +# **后缀名详解和不同操作系统后缀名** + + +--- + + + +# FIRST C语言文件后缀名详解 ## 一、核心文件类型 ### 1. `.c` -- **作用**:存储C语言源代码,包含函数定义、变量声明及核心逻辑 -- **编译流程**:作为编译器入口文件,触发C语言编译规则 +- **存在原因**: + 作为C语言的源代码标准标识符,使编译器能自动识别语言类型。早期C++与C共用`.c`后缀导致混淆,后通过`.cpp`等扩展名区分[1](@ref)。 +- **设计逻辑**: + 通过文件扩展名实现语言特征与编译器行为的绑定,避免手动指定编译规则。 ### 2. `.h` -- **作用**:头文件,声明函数接口、宏定义、数据结构 -- **关键机制**:通过预处理指令实现接口声明与实现分离 - -### 3. `.exe` -- **作用**:Windows可执行文件,包含PE(Portable Executable)结构 -- **平台特性**:Linux系统无此扩展名 +- **存在原因**: + 实现接口与实现的物理分离,支持模块化开发。预处理器通过`#include`指令将声明引入多个源文件[5](@ref)。 +- **设计逻辑**: + 强制头文件与实现文件命名关联(如`module.h`对应`module.c`),增强代码可维护性。 --- ## 二、编译中间产物 -### 4. `.o` (Linux) / `.obj` (Windows) -- **作用**:编译器生成的中间目标文件,包含机器码和符号表 -- **生成方式**:通过编译器`-c`选项生成 +### 3. `.o` (Linux) / `.obj` (Windows) +- **存在原因**: + 存储编译后的机器码片段,供链接器合并为最终可执行文件。避免重复编译相同源文件[7](@ref)。 +- **设计逻辑**: + 通过二进制格式保留符号表信息,支持增量编译和跨模块调试。 -### 5. `.i` -- **作用**:预处理后的源代码文件(展开宏和头文件) -- **生成命令**:编译器预处理选项生成 +### 4. `.i` +- **存在原因**: + 保留预处理后的纯C代码,用于调试宏展开错误或条件编译问题。绕过预处理阶段直接分析代码[10](@ref)。 +- **设计逻辑**: + 分离预处理与编译阶段,提供中间状态的可读性。 -### 6. `.s` -- **作用**:汇编代码文件,展示编译器生成的汇编指令 -- **应用场景**:性能优化分析 +### 5. `.s` +- **存在原因**: + 展示编译器生成的汇编指令,辅助性能优化或硬件级调试。不同架构的汇编语法差异显著[8](@ref)。 +- **设计逻辑**: + 作为编译器优化策略的可视化输出,连接高级语言与底层机器码。 --- ## 三、库文件类型 -### 7. `.a` (Linux) / `.lib` (Windows) -- **作用**:静态库文件,归档多个目标文件 -- **链接方式**:编译时直接嵌入可执行文件 +### 6. `.a` (Linux) / `.lib` (Windows) +- **存在原因**: + 归档多个目标文件,实现代码复用。静态链接时直接嵌入可执行文件,避免运行时依赖[13](@ref)。 +- **设计逻辑**: + 通过`ar`工具管理对象文件集合,优化加载速度和内存占用。 -### 8. `.so` (Linux) / `.dll` (Windows) -- **作用**:动态库文件,运行时按需加载 -- **加载机制**: - - Linux通过动态链接器加载 - - Windows依赖系统路径查找 +### 7. `.so` (Linux) / `.dll` (Windows) +- **存在原因**: + 支持动态加载机制,允许多个程序共享同一份代码。减少内存占用并简化更新流程[14](@ref)。 +- **设计逻辑**: + 依赖动态链接器解析符号,通过`dlopen`/`LoadLibrary`等接口实现运行时绑定。 --- ## 四、构建系统相关 -### 9. `.mk` -- **作用**:Makefile文件,定义编译规则和依赖关系 +### 8. `.mk` +- **存在原因**: + 定义编译规则和依赖关系,实现自动化构建。Make工具通过解析`.mk`文件决定编译顺序[15](@ref)。 +- **设计逻辑**: + 通过规则语法(如`target: prerequisites`)描述任务依赖图,提升构建效率。 -### 10. `.d` -- **作用**:头文件依赖描述文件,记录头文件包含关系 -- **生成命令**:编译器自动生成 +### 9. `.d` +- **存在原因**: + 自动生成头文件依赖关系,支持增量编译。避免手动维护依赖链的复杂性[10](@ref)。 +- **设计逻辑**: + 利用编译器`-M`选项解析`#include`关系,生成精确的依赖描述。 --- ## 五、特殊用途文件 -### 11. `.pch` / `.gch` -- **作用**:预编译头文件缓存 -- **优势**:加速大型项目编译 +### 10. `.pch` / `.gch` +- **存在原因**: + 缓存预编译头文件内容,加速大型项目编译。减少重复解析公共头文件的时间[15](@ref)。 +- **设计逻辑**: + 通过`#pragma hdrstop`等指令控制预编译范围,优化编译器内存使用。 -### 12. `.S` (大写) -- **作用**:预编译汇编代码文件 -- **编译方式**:支持汇编与C混合编程 +### 11. `.S` (大写) +- **存在原因**: + 区分汇编源码与编译器生成的汇编文件。支持混合编程(如内联汇编)[14](@ref)。 +- **设计逻辑**: + 保留汇编语法细节,允许开发者直接编写优化指令。 --- ## 六、平台标识规范 -| 文件类型 | Linux规范 | Windows规范 | -|----------------|--------------------|--------------------| -| 可执行文件 | 无扩展名 | `.exe` | -| 目标文件 | `.o` | `.obj` | -| 静态库 | `.a` | `.lib` | -| 动态库 | `.so` | `.dll` | +| 文件类型 | Linux规范 | Windows规范 | 存在原因 | +|----------------|--------------------|--------------------|------------------------------| +| 可执行文件 | 无扩展名 | `.exe` | 区分操作系统原生可执行格式 | +| 目标文件 | `.o` | `.obj` | 适配不同平台的编译器输出格式 | +| 静态库 | `.a` | `.lib` | 链接器对库文件的差异化处理 | +| 动态库 | `.so` | `.dll` | 动态加载机制的实现差异 | + +--- + +## 七、历史因素 + +1. **C语言初期**: + `.c`和`.h`作为唯一标准后缀,未考虑多语言扩展需求[1](@ref)。 +2. **C++出现**: + 引入`.cpp`、`.hpp`等后缀,解决与C代码的编译器识别冲突[1](@ref)。 +3. **跨平台需求**: + Linux采用`.so`动态库,Windows使用`.dll`,反映操作系统设计哲学差异[13](@ref)。 +4. **构建工具发展**: + `.mk`和`.d`文件的出现,源于Makefile和自动化构建工具的普及[15](@ref)。 --- -## 七、编译流程关联 -1. **预处理**:处理宏定义和头文件包含 -2. **编译**:生成汇编代码 -3. **汇编**:生成目标文件 -4. **链接**:合并生成可执行文件 +## 八、设计特性总结 +- **明确性**:通过后缀名直观反映文件用途(如`.c`=代码,`.h`=接口)。 +- **扩展性**:允许自定义后缀(如`.inl`内联头文件)适应特殊场景。 +- **兼容性**:保留历史遗留后缀(如`.obj`),确保旧项目可维护性。 -## 八、命名规范建议 +--- +## 九、命名规范建议 1. **主程序**:`main.c`(程序入口) 2. **模块化开发**:功能模块用`module.c`+`module.h`配对 3. **跨平台注意事项**: - 避免依赖后缀名的大小写 - 统一构建工具管理不同平台的后缀规则 + + + + + + +# SECOND 不同操作系统对文件后缀名的处理机制差异 + +## 一、扩展名作用机制对比 +| 维度 | Windows | Linux | +|--------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------| +| **核心机制** | 扩展名是文件类型的**核心标识符**,直接关联程序(如`.exe`绑定系统加载器) | 扩展名仅为**辅助提示**,实际依赖文件头(magic number)和权限位判断类型[1,2](@ref)| +| **文件关联** | 通过注册表`HKEY_CLASSES_ROOT`强制绑定扩展名与程序(如`.txt`默认用记事本) | 无系统级扩展名绑定,需手动配置或依赖Shebang行(如`#!/bin/bash`)[5](@ref)| +| **安全风险** | 隐藏扩展名易被恶意文件伪装(如`.exe`伪装成`.jpg`) | 无隐藏扩展名机制,文件头验证降低伪装风险[3,6](@ref)| + +--- + +## 二、执行权限控制差异 +| 维度 | Windows | Linux | +|--------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------| +| **权限模型** | 无权限隔离,所有文件均可通过双击尝试执行 | 强制权限分离,通过`rwx`权限位控制访问(如`-rwxr-xr-x`表示可执行)[5](@ref)| +| **执行逻辑** | 未隐藏扩展名时,用户可能误触运行恶意程序 | 无执行权限的文件无法运行(即使扩展名为`.sh`)[2](@ref)| +| **脚本执行** | 需显式关联解释器(如`.bat`文件关联CMD) | 需在文件首行声明解释器(如`#!/usr/bin/python3`)[9](@ref)| + +--- + +## 三、文件类型识别方式 +| 维度 | Windows | Linux | +|--------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------| +| **识别方法** | 基于扩展名的**硬编码映射**(注册表优先) | 基于内容检测的**多维度判断**(文件头、MIME类型、扩展名)[1,5](@ref)| +| **典型实现** | 通过`shell32.dll`解析扩展名,依赖系统预设规则 | 使用`file`命令或`libmagic`库分析文件头特征(如ELF头标识Linux可执行文件)[2](@ref)| +| **扩展性** | 新增文件类型需手动注册表配置 | 支持动态识别未知文件类型(如通过`xxd`查看十六进制头)[6](@ref)| + +--- + +## 四、历史演进与设计哲学 +| 维度 | Windows | Linux | +|--------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------| +| **设计起源** | 继承DOS的8.3命名规则,扩展名强制3字符限制(后扩展为256字符) | 继承UNIX哲学:**小即是美**,扩展名非必需[5](@ref)| +| **兼容性处理** | 保留旧格式(如`.doc`与`.docx`),通过兼容层支持多版本文件 | 通过标准化(如FHS目录结构)和开放协议(如HTTP)实现跨版本兼容[9](@ref)| +| **安全演进** | 逐步引入数字签名(如`.exe`的数字证书),但未根本改变扩展名依赖机制 | 早期采用`setuid`/`setgid`控制权限,现代引入SELinux等强制访问控制[5](@ref)| + +--- + +## 五、跨平台开发影响 +| 场景 | Windows特性 | Linux特性 | +|--------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------| +| **可执行文件** | 必须使用`.exe`/`.bat`扩展名,依赖系统加载器 | 无扩展名要求,通过权限位和Shebang行标识 | +| **脚本文件** | `.bat`/`.ps1`需特定语法,无法直接跨平台运行 | 支持POSIX标准脚本(如Bash),通过`chmod +x`赋予执行权限[9](@ref)| +| **库文件管理** | `.dll`文件需显式导入,版本冲突常见 | `.so`文件通过符号链接和`LD_LIBRARY_PATH`实现动态加载,支持版本控制[2](@ref)| + +--- + +## 六、根本差异总结 +1. **信任模型** + - Windows:**扩展名即契约**(系统保证扩展名与程序匹配) + - Linux:**内容即真相**(用户自行验证文件头和权限) + +2. **安全范式** + - Windows:通过**隔离执行环境**(如AppLocker)弥补扩展名缺陷 + - Linux:通过**最小权限原则**(如`chmod 755`)降低风险 + +3. **开发哲学** + - Windows:**用户友好优先**(隐藏技术细节,如自动关联程序) + - Linux:**系统透明优先**(暴露文件属性,如`ls -l`显示权限) + +--- + +## 七、典型问题对照 +| 问题现象 | Windows解决方案 | Linux解决方案 | +|------------------------|---------------------------------------|---------------------------------------| +| 恶意文件伪装 | 启用"显示文件扩展名"选项| 通过`file`命令验证文件类型| +| 脚本跨平台兼容性 | 使用批处理转译工具(如Bat To Exe) | 统一使用POSIX标准语法| +| 库文件版本冲突 | 使用DLL重定向或Side-by-Side组装 | 通过`LD_PRELOAD`或容器化隔离| + +--- + +## 八、扩展知识:特殊后缀处理 +| 后缀类型 | Windows行为 | Linux行为 | +|--------------------|-----------------------------------------------------------------------|---------------------------------------------------------------------| +| **无扩展名文件** | 默认视为文档,右键菜单无编辑选项 | 可通过`./file`直接执行(若权限允许)| +| **大小写混合后缀** | 强制统一为小写(如`.JPG`自动转为`.jpg`) | 严格区分大小写(`.Sh`与`.sh`为不同文件)[5](@ref)| +| **自定义后缀** | 需手动注册文件类型关联 | 自动识别为普通文件,无特殊处理[6](@ref)|