news 2026/7/30 3:33:43

超详细 C 语言入门笔记|原理、编译、规范全覆盖

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
超详细 C 语言入门笔记|原理、编译、规范全覆盖

计算机基础

为什么学C语言需要了解计算机基础?

C语言是一门贴近硬件的编程语言,它允许直接操作内存地址和寄存器。如果不了解计算机的基本组成和工作原理,就很难理解C语言中的"指针"、"内存"、"编译"等核心概念。

计算机的组成

计算机的定义与组成

定义:能进行计算以及逻辑处理的设备。

组成:软件(计算机中运行的程序和数据),硬件(计算机的物理部件:内存条、CPU硬盘等)

计算机的六大部件
类型功能说明
中央处理器(CPU)负责控制指令执行和数据计算
内存用于临时存储程序运行时的指令和数据
输入设备指向计算机输入数据(如:键盘,鼠标,扫码枪等)
输出设备指将计算机处理结果输出(如:显示器,打印机等)
外存设备永久存储数据(如:硬盘,U盘等)
网络实现设备间的数据传输与通信
计算机的工作原理

程序存储:程序和数据预先存储在内存中

程序控制:CPU按照指令顺序逐条执行

计算机语言
语言类型特点
机器语言二进制代码,可直接控制硬件,效率最高
汇报语言用助记符表示机器指令,需通过汇编器翻译为机器语言
高级语言贴近人类自然语言,可读性强,需要编译/解释执行

C语言简史与特点

2.2.1 C语言的起源

  • 其前身是 B 语言;

  • B 语言由美国贝尔实验室的 Ken Thompson(肯·汤普森)于 1969 年开发,并用其编写了初版 UNIX 系统;

  • 1972 年,美国贝尔实验室的 Dennis Ritchie(丹尼斯·M·里奇)在 B 语言基础上开发出 C 语言,C 语言提供了丰富的数据类型和标识符,使程序编写更高效便捷;

  • 1973 年初,C 语言主体完成,汤普森和里奇随即用 C 语言完全重写了 UNIX 系统。

2.2.2 C语言的标准

为推动 C 语言规范化发展,美国国家标准协会(ANSI)于 1982 年成立委员会制定 C 语言标准:

年份标准名称说明
1989C89(ANSI C)ANSI 发布首个完整 C 语言标准
1990C90(ISO C)ISO 一字不改采纳 C89
1999C99ISO 发布修订完善后的标准
2011C11ISO/IEC 9899:2011
2018C18主要修复 C11 的技术漏洞
2023C23新增#embednullptrtypeof/typeof_unqualconstexpr增强、十进制浮点类型、空初始化器{}、属性语法[[]]等特性

2.2.3 C语言特点

  • 简洁高效,支持底层硬件操作(可直接访问内存地址,操作寄存器)

  • 可移植性强、符合标准的C程序可在不同平台(Windows、Linux、嵌入式设备)间轻松移植

  • 适合结构化编程,代码模块化程度高、容易维护、容易调试

  • 生成代码质量高、执行速度快(接近汇编语言)

C语言程序的开发过程

开发的三个步骤

1.编辑:由程序员编写的源代码程序(.c文件)

2.编译:由编译器将源代码转换为计算机可执行的二进制指令文件

3.运行:由操作系统加载并执行二进制程序

C语言程序编译的过程

编译的四个过程:

编译步骤功能说明命令文件类型转换
预处理是处理宏定义(#define),头文件(#include)、注释等,将头文件内容直接拷贝到当前文件。预处理需要用到预处理器gcc -E *.c -o *.i.c.i
编译对预处理后的代码进行语法分析,语义检查,生成汇编语言代码。编译要用到编译器gcc -S *.c -o *.s.i/.c.s
汇编将汇编代码转换为二进制代码,生成目标文件。汇编要用到汇编器gcc -c *.s -o *.o.s.o
链接将目标文件与系统库文件、其他目标文件合并,生成可执行文件。链接要用到链接器gcc *.c -o *.o可执行文件

C语言的基本结构

简单C语言程序

示例代码

/************************************************************************* > File Name: dem01.c > Author: XXX > Description:程序结构:第一个C语言程序,输出 Hello World > Created Time: 2026年07月27日 星期一 20时35分42秒 ************************************************************************/ ​ #include <stdio.h> //引入输入输出标准库头文件 ​ int main(int argc,char *argv[]) //主函数:一个 .c 程序里有且仅有一个 { printf("hello world\n"); // C标准库提供的函数:向控制台输出 Hello World! \n是换行的意思,需要引入<stdio.h> ​ return 0; } ​ //运行结果 hello world

CV大法:

  • Linux终端 → Windows:Ctrl + Shift + CCtrl + V

  • Windows → Linux终端:Ctrl + CCtrl + Shift + V

程序结构分析

  • 注释:用于解释代码逻辑,仅给程序员阅读。注释在编译的早期翻译阶段(预处理阶段)被替换为空格,不参与后续编译。

  • 预处理指令:以#开头,用于包含头文件、宏定义等,如#include <stdio.h>#define PI 3.14159

  • 主函数(main函数):程序的唯一入口,由操作系统通过程序启动机制自动调用,不能被程序员自定义函数调用。

  • 函数组成

    • 函数头:说明函数的返回值类型、函数名和参数列表。在C语言中,int main(void)明确表示无参数,int main()表示参数未指定(与C++不同,C中二者语义有区别)。若无参数,建议统一使用int main(void)int main(int argc, char *argv[])

    • 函数体:{}括起来,包含变量声明和语句执行的部分(语句以;结尾)

函数调用语句:调用已定义的函数(如:printf,是标准库中的输出函数)

C语言的程序规范

格式缩进

推荐缩进4个空格(或配置编辑器将Tab键显示宽度设为4个字符),统一代码层级。

足够注释

对于关键代码(如函数功能、复杂逻辑、变量含义)添加注释。

适当空行

预处理指令与函数之间、函数与函数之间、全局变量与函数之间添加空行,区分代码模块。

示例代码

/************************************************************************* > File Name: demo02.c > Author: XXX > Description: 编程规范:宏定义与空行使用示例 ************************************************************************/ // 包含头文件,预处理时,会将对应的.h文件代码全部拷贝到当前文件位置 #include <stdio.h> #include <stdlib.h> ​ // 宏定义:预处理阶段,会使用宏值替换掉宏名称,称作宏展开 #define R 2 // 定义一个半径 #define PI 3.14159 ​ int main(int argc, char *argv[]) { // 向控制台输出hello world! printf("hello world!\n"); ​ // 计算圆的面积 double area = PI * R * R; //预处理:double area = 3.14159 * 2 * 2 printf("%lf\n", area); ​ return 0; } ​ //运行结果 hello world! 12.566360

{}对齐

#不推荐以下分格(多用在Java) int fun(){ ... } ​ #推荐风格(多用于C/C++) int fun() { ... }

分层缩进与模块化

函数体内的代码按逻辑层次缩进,复杂逻辑拆分模块化

int fun() { if (...) { for(...) { printf(); } } if (...) { printf(); } }

单句单行

不将多条语句写在同一行

int main() { // 不推荐的写法 printf("第1行\n"); printf("第2行\n"); printf("第3行\n"); // 推荐的写法 printf("第1行\n"); printf("第2行\n"); printf("第3行\n"); }

标识符命名

函数名、变量名等都叫标识符,命名要见名知意,使用英文单词或短语,避免无意义的字母

int main() { // 不推荐的写法 int a = 21; int b = 168; int c = 190; // 推荐的写法 int age = 21; // 年龄:21 int height = 168; // 身高:168 int weight = 190; // 体重:190 return 0; }

C语言中的注释

C语言中代码注释分为单行注释多行注释,不参与代码编译,在预处理前计算机系统就删除了。

注释分类语法格式使用场景
单行注释//开头,注释到这一行结束变量说明,常量说明,函数调用语句等
多行注释/* 注释内容 */,可跨行注释,但不能嵌套头文件说明,函数功能说明等

示例代码

#include <stdio.h> ​ int main(int argc,char *argv[]) { //单行注释 //printf("int的大小=%ld\n",sizeof(int)); ​ //多行注释 /*int a=10; printf("%d\n",a);*/ ​ return 0; }

备注:文档注释(扩展):本质上还是多行注释,用于生成标准化文档,格式更规范,一般替代传统的多行注释。

示例代码

/** * @brief 函数名:main * @author 开发者姓名 * @date 开发时间 * @param argc 解释参数 * @param argv 解释参数 * @return 返回值说明 */
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 3:33:33

HostMod AI建站:零基础也能打造智能网站的秘诀

在AI技术席卷各行各业的今天&#xff0c;网站建设也在经历一场前所未有的变革。传统的建站方式需要懂设计、会写代码、配置服务器&#xff0c;门槛高、周期长。而如今&#xff0c;HostMod 正在用AI技术颠覆这一切。 HostMod 是什么&#xff1f; HostMod&#xff08;idc.gcmod…

作者头像 李华
网站建设 2026/7/30 3:33:13

Android相机黑屏问题排查与优化实践

1. 问题现象与初步排查58同城App作为国内头部生活服务平台&#xff0c;其相机功能在二手房拍摄、求职简历上传等核心场景中扮演重要角色。近期我们收到用户反馈&#xff0c;部分Android设备在调用App内相机时出现黑屏现象&#xff0c;具体表现为&#xff1a;点击拍照按钮后相机…

作者头像 李华
网站建设 2026/7/30 3:31:59

AI 辅助的产品数据分析:从「看数字」到「理解用户行为」

AI 辅助的产品数据分析&#xff1a;从「看数字」到「理解用户行为」 一、当数据分析开始「只报告过去」 独立产品的数据分析&#xff0c;最容易陷入的陷阱是&#xff1a;「只看表面的数字&#xff0c;而不理解数字背后的用户行为」。 一个典型的场景是&#xff1a;你在分析产…

作者头像 李华
网站建设 2026/7/30 3:31:52

AI 产品的长期留存:从「首次惊艳」到「日常依赖」的行为设计

AI 产品的长期留存&#xff1a;从「首次惊艳」到「日常依赖」的行为设计 一、当「首次惊艳」开始衰退 AI 产品的用户留存曲线&#xff0c;和一个有趣的特征&#xff1a;它的「首次惊艳」效应特别强&#xff0c;但「衰退速度」也比传统软件产品更快。 这个特征的根源在于&…

作者头像 李华
网站建设 2026/7/30 3:31:36

汉诺塔递归算法详解:从C语言实现到递归思维深度解析

1. 从“搬盘子”到“递归思想”&#xff1a;汉诺塔为什么是理解递归的绝佳起点如果你刚开始学C语言&#xff0c;或者对“递归”这个概念感到既熟悉又陌生——知道它大概是自己调用自己&#xff0c;但一写代码就绕晕&#xff0c;那汉诺塔问题绝对是为你量身定做的“磨刀石”。我…

作者头像 李华