-
Notifications
You must be signed in to change notification settings - Fork 14
添加了C语言前置知识的模块 #32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
Juryorca
wants to merge
13
commits into
FDUCSLG:main
Choose a base branch
from
Juryorca:add/c-pre-knowledge
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+325
−0
Draft
添加了C语言前置知识的模块 #32
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
a994dd2
addition : Prerequisite knowledge for C programming
Juryorca 6c9ce6e
Add files via upload
Lyz1116-FOUND 7b6a946
移动文件,修改文件名
Juryorca 87a520c
删除命名不当文件
Juryorca f125fae
修正
Juryorca 5b25946
修正文档关于学习 C 语言的价值
Juryorca 52ffccc
Create FileExtionsion
Lyz1116-FOUND 50a56b7
fix(Where-c-editor-n-ide.md): Revise editor and IDE documentation for…
Juryorca 414016b
file extensions
Lyz1116-FOUND a3d9b4a
Rename FileExtionsion to FileExtionsion.md
Lyz1116-FOUND 962f1a3
Revise file extension documentation for C language
Lyz1116-FOUND cb4ffef
[feat] 后缀名 merge from lyz1116-FOUND
Juryorca 43d2837
Merge branch 'FDUCSLG:main' into add/c-pre-knowledge
Juryorca File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,214 @@ | ||
| # **后缀名详解和不同操作系统后缀名** | ||
|
|
||
|
|
||
|
|
||
| --- | ||
|
|
||
|
|
||
|
|
||
| # FIRST C语言文件后缀名详解 | ||
| ## 一、核心文件类型 | ||
|
|
||
| ### 1. `.c` | ||
| - **存在原因**: | ||
| 作为C语言的源代码标准标识符,使编译器能自动识别语言类型。早期C++与C共用`.c`后缀导致混淆,后通过`.cpp`等扩展名区分[1](@ref)。 | ||
| - **设计逻辑**: | ||
| 通过文件扩展名实现语言特征与编译器行为的绑定,避免手动指定编译规则。 | ||
|
|
||
| ### 2. `.h` | ||
| - **存在原因**: | ||
| 实现接口与实现的物理分离,支持模块化开发。预处理器通过`#include`指令将声明引入多个源文件[5](@ref)。 | ||
| - **设计逻辑**: | ||
| 强制头文件与实现文件命名关联(如`module.h`对应`module.c`),增强代码可维护性。 | ||
|
|
||
| --- | ||
|
|
||
| ## 二、编译中间产物 | ||
|
|
||
| ### 3. `.o` (Linux) / `.obj` (Windows) | ||
| - **存在原因**: | ||
| 存储编译后的机器码片段,供链接器合并为最终可执行文件。避免重复编译相同源文件[7](@ref)。 | ||
| - **设计逻辑**: | ||
| 通过二进制格式保留符号表信息,支持增量编译和跨模块调试。 | ||
|
|
||
| ### 4. `.i` | ||
| - **存在原因**: | ||
| 保留预处理后的纯C代码,用于调试宏展开错误或条件编译问题。绕过预处理阶段直接分析代码[10](@ref)。 | ||
| - **设计逻辑**: | ||
| 分离预处理与编译阶段,提供中间状态的可读性。 | ||
|
|
||
| ### 5. `.s` | ||
| - **存在原因**: | ||
| 展示编译器生成的汇编指令,辅助性能优化或硬件级调试。不同架构的汇编语法差异显著[8](@ref)。 | ||
| - **设计逻辑**: | ||
| 作为编译器优化策略的可视化输出,连接高级语言与底层机器码。 | ||
|
|
||
| --- | ||
|
|
||
| ## 三、库文件类型 | ||
|
|
||
| ### 6. `.a` (Linux) / `.lib` (Windows) | ||
| - **存在原因**: | ||
| 归档多个目标文件,实现代码复用。静态链接时直接嵌入可执行文件,避免运行时依赖[13](@ref)。 | ||
| - **设计逻辑**: | ||
| 通过`ar`工具管理对象文件集合,优化加载速度和内存占用。 | ||
|
|
||
| ### 7. `.so` (Linux) / `.dll` (Windows) | ||
| - **存在原因**: | ||
| 支持动态加载机制,允许多个程序共享同一份代码。减少内存占用并简化更新流程[14](@ref)。 | ||
| - **设计逻辑**: | ||
| 依赖动态链接器解析符号,通过`dlopen`/`LoadLibrary`等接口实现运行时绑定。 | ||
|
|
||
| --- | ||
|
|
||
| ## 四、构建系统相关 | ||
|
|
||
| ### 8. `.mk` | ||
| - **存在原因**: | ||
| 定义编译规则和依赖关系,实现自动化构建。Make工具通过解析`.mk`文件决定编译顺序[15](@ref)。 | ||
| - **设计逻辑**: | ||
| 通过规则语法(如`target: prerequisites`)描述任务依赖图,提升构建效率。 | ||
|
|
||
| ### 9. `.d` | ||
| - **存在原因**: | ||
| 自动生成头文件依赖关系,支持增量编译。避免手动维护依赖链的复杂性[10](@ref)。 | ||
| - **设计逻辑**: | ||
| 利用编译器`-M`选项解析`#include`关系,生成精确的依赖描述。 | ||
|
|
||
| --- | ||
|
|
||
| ## 五、特殊用途文件 | ||
|
|
||
| ### 10. `.pch` / `.gch` | ||
| - **存在原因**: | ||
| 缓存预编译头文件内容,加速大型项目编译。减少重复解析公共头文件的时间[15](@ref)。 | ||
| - **设计逻辑**: | ||
| 通过`#pragma hdrstop`等指令控制预编译范围,优化编译器内存使用。 | ||
|
|
||
| ### 11. `.S` (大写) | ||
| - **存在原因**: | ||
| 区分汇编源码与编译器生成的汇编文件。支持混合编程(如内联汇编)[14](@ref)。 | ||
| - **设计逻辑**: | ||
| 保留汇编语法细节,允许开发者直接编写优化指令。 | ||
|
|
||
| --- | ||
|
|
||
| ## 六、平台标识规范 | ||
|
|
||
| | 文件类型 | 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)。 | ||
|
|
||
| --- | ||
|
|
||
| ## 八、设计特性总结 | ||
| - **明确性**:通过后缀名直观反映文件用途(如`.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)| |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| # 编译器(Compiler) | ||
| 这篇文章将初步告诉你计算机如何“看懂”你的代码。 | ||
|
|
||
| ## 计算机能看懂什么 | ||
| 计算机能且只能直接看懂**机器语言**,也就是由 0 和 1 组成的二进制指令集,几乎不可读。 | ||
|
|
||
| 例如: | ||
| ``` | ||
| 1011000000000001 | ||
| ``` | ||
| 用`x86_64`汇编定义的指令来解释它,是: | ||
| ``` | ||
| mov al, 1 | ||
| ``` | ||
| - 前八位 `10110000` 可以理解为“将立即数放到`al`寄存器”的操作码 | ||
| - 后八位 `00000001` 是要存入的数字 1。 | ||
|
|
||
| 机器语言对人类很不友好,但cpu需要它来理解需要执行什么指令。我们(通常)不能直接使用 0/1 编程——这就是编译器存在的理由:把人能读、能写的高级语言(如 C)翻译成机器理解并执行的指令。 | ||
|
|
||
| ## 编译器做了什么 | ||
| TODO |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # 编辑器(Editor)和集成开发环境(IDE) | ||
|
|
||
| ## 编辑器 | ||
|
|
||
| ### 什么是编辑器? | ||
| 编辑器(或称文本编辑器)是用于创建与编辑纯文本的工具,主要用于编写或修改文档或者代码,例如 Windows 记事本、Vim、Sublime Text 等。为了方便编程,现代编辑器通过插件/扩展增加了许多面向开发者的功能,我们通常把具有这些扩展功能的编辑器称为代码编辑器(code editor),如 Visual Studio Code(VS Code)。 | ||
|
|
||
| 常见的代码编辑器功能包括: | ||
| - 语法高亮:根据编程语言的语法规则(如 `C`、`Python`、`C++`、`Java`)用不同颜色标注关键字、变量、函数等,提高可读性。 | ||
| - 插件/扩展:支持通过插件添加语言支持、调试器、格式调整、版本控制等功能。 | ||
| - 智能补全:基于语言规则和上下文自动提示代码片段、函数签名和标识符,提升编码效率。 | ||
| - 其他便利功能:Snippets(代码片段)、多光标编辑、文件树/资源管理、集成终端等。 | ||
|
|
||
| ### 常见的编辑器 | ||
| - Windows 记事本、macOS 文本编辑(TextEdit)、Linux 下的 `vim`/`nano` 等简单文本编辑器 | ||
| - Visual Studio Code(VS Code)、Sublime Text、Cursor 等主流编辑器 | ||
|
|
||
| 有关 VS Code 的环境配置请移步至项目中对应的配置文档或官方文档。 | ||
|
|
||
| ## 集成开发环境(IDE) | ||
|
|
||
| ### 什么是集成开发环境? | ||
| 集成开发环境(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 等 | ||
|
|
||
| ### 下载 | ||
| - 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 等)请优先从其官方渠道或知名镜像下载安装包,以保证软件来源可靠并获得安全更新。 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| #index.md | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,36 @@ | ||
| # 为什么要学 C 语言 | ||
|
|
||
| 学 C 语言的核心价值可以从以下三个维度来理解: | ||
|
|
||
| ## 一、深入理解计算机底层 | ||
| C 语言贴近硬件,能够直接操作内存并与底层资源交互,帮助你理解代码如何被计算机执行: | ||
|
|
||
| - 明白 `int a = 1;` 并不仅仅是“定义一个变量”,而是在内存中为该变量分配空间并存储二进制表示(在常见的 32/64 位平台上,`int` 往往占 4 字节,但不同平台可能不同)。 | ||
| - 理解“编译”是把人类可读的源码翻译成 CPU 能执行的机器指令(或汇编),以及汇编、链接的基本流程。 | ||
| - 学会使用指针、理解栈和堆、内存管理、对齐、调用约定等底层概念,这些知识会让你在调试、性能优化和系统设计时有更直观的判断力。 | ||
|
|
||
| ## 二、多领域的基础工具 | ||
| C 在很多核心领域仍然不可或缺,学会后能覆盖很多高价值场景: | ||
|
|
||
| - 系统开发:操作系统内核(如 Linux)、驱动程序、固件与嵌入式系统(单片机、智能设备)。 | ||
| - 底层软件:编译器、数据库底层实现、网络协议栈等。 | ||
| - 高性能场景:数值计算、工业控制、部分游戏引擎底层模块(多数现代大型游戏引擎使用 C++,但底层思想与性能优化与 C 密切相关)。 | ||
| - 其它:高性能网络服务、实时系统、微控制器开发等。 | ||
|
|
||
| 学会 C 可以让你更容易进入这些领域或理解这些领域的源码与设计。 | ||
|
|
||
| ## 三、锻炼基本功,降低后续学习成本 | ||
| C 的语法和编程风格要求你显式说明类型并手动管理资源,这会培养良好的工程习惯: | ||
|
|
||
| - 关注内存与资源管理,学会发现和避免内存泄漏、悬空指针等常见问题。 | ||
| - 熟练掌握流程控制(`if`、`switch`、`for`、`while`)与函数设计,这些结构是大多数编程语言的共通模板。 | ||
| - C 的严谨性迫使你理解计算机在做什么(数据在虚拟内存中如何存储、函数调用如何进行、IO 的原理等),对这些内容的理解会让你在转学其他语言(如 Python、C++、Go、Rust)时事半功倍。 | ||
|
|
||
| ## 注意事项 | ||
| - C 功能强但容易出现低级错误(越界、悬指针、未定义行为等),调试难度相对较高。学习时务必养成良好的编码规范、重视调试工具使用。 | ||
| - 在现代软件工程中,选择 C 还是更高层语言应根据项目需求(开发效率 vs. 执行效率 vs. 可维护性)权衡。 | ||
|
|
||
| ## 简短结论 | ||
| - 如果你的目标是做底层开发、嵌入式系统、操作系统或追求高性能,学 C 是非常必要的基础。 | ||
| - 如果你想打好编程基础、理解计算机原理,C 是一块极好的跳板。 | ||
|
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The index file contains only a placeholder comment '#index.md' without any actual documentation content. Consider adding meaningful content such as an introduction to C pre-knowledge topics, a table of contents, or links to related sections.