C 语言:20250708笔记
内容提要
-
C语言概述
-
数据类型
-
常量
-
变量
C语言概述
计算机基础
计算机的组成
计算机组成
-
计算机:能进行计算以及逻辑处理的设备
-
硬件:组成计算机的物理部件。(内存条、CPU、硬盘..)
开发中对于硬件的认知:
硬件包括电子设备、单片机、集成电路和嵌入式系统。
-
软件:计算机中运行的程序和数据。
开发中对于软件的认知:
软件分为系统软件(OS)、应用软件和编程工具(编译器)
计算机的六大部件
-
中央处理器(CPU):控制 + 计算
-
内存:临时存储运行时的数据。
-
输入设备:向计算机输入数据(键盘、鼠标、扫码枪)
-
输出设备:将计算机数据进行输出(显示器、打印机)
-
外存储器:永久存储数据(硬盘)
-
网络:数据传输与通信
计算机的工作原理
-
存储程序:程序和数据存储在内存中
-
程序控制:CPU按指令顺序执行
计算机的语法
-
机器语言:二进制代码,直接控制硬件
-
汇编语言:助记符形式,需要汇编器翻译
-
高级语言:C/C++,Java,Python,PHP,C#,GO
C语言简史与特点
C语言的起源
-
其前身是B语言;
-
B语言是美国贝尔实验室的 Ken Thompson(肯·汤普森)于1969年开发出来的,并且用B语言编写了初版的UNIX系统
-
1972年美国贝尔实验室的Dennis Ritchie(丹尼斯·M·里奇)在B语言基础上开发的C语言.C语言提供了丰富的数据类型和标识符,使得程序的编写变得非常高效和方便。
-
1973年初,C语言的主体完成。汤普森和里奇迫不及待地开始用它完全重写了UNIX。
C语言的标准
为了C语言健康发展下去,很多有识之士及美国国家标准协会(ANSI)于1982年成立了一个委员会以确定C语言的标准。
-
1989 ANSI 发布了第一个完整的C语言标准,即C89。不过人们习惯性的称为 “ANSI C”
-
1990年ISO(国际标准化组织一字不改的采纳了 C89,官方给出的名称为 ISO C90) 。
-
1999年,C语言标准经过了一次修正和完善后,ISO发布了新版的C语言标准,简称” C99”。
-
2018年6月份发布的 “C18”GNU C 标准 (标准C的扩展) ,进一步增强了语言的稳定性和功能性。
-
在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899:2011,简称为“C11”。
-
“C23”是最新的标准,预计将进一步扩展C语言的功能和性能。
-
应用于Linux 系统,当然Linux也支持标准C,因为标准C是跨平台的。
嵌入式开发就是针对Linux系统的开发,而Linux系统是使用C语言开发的,所以从事嵌入式开发要使用C语言。
C语言特点
-
简洁高效,支持底层硬件操作
-
可移植性强,适合结构化编程
-
生成代码质量高,执行速度快
C语言程序的开发过程(掌握)
开发的三个步骤
①编辑:编写源代码(.c文件,程序员完成)
②编译:将源代码文件转化为可执行的文件(编译器完成)
③运行:执行程序(操作系统加载)
C语言程序的编译过程
注意:本章节只是做一个简单的讲解,后续在深入!
上面提到的编译,实际上是分为了四个步骤:
1.预处理:处理宏和头文件以及注释等
2.编译:生成汇编代码
3.汇编:转换为机器码/二进制代码
4.链接:合并库文件和目标文件(二进制代码)


-
测试代码:
// 头文件包含 预处理的时候,会将stdio.h中的代码全部拷贝到当前文件 #include <stdio.h> // 宏定义 #define R 2 #define PI 3.14 int main() { printf("hello world!\n"); // 计算圆的面积 double area = PI * R * R; // 宏展开,double area = 3.14 * 2 * 2 printf("%f\n", area); }编译的命令
编译步骤 命令 文件类型 说明 预处理 gcc -E *.c -o *.i*.c → *.i 生成的是C代码(文本) 编译 gcc -S *.c -o *.s*.i → *.s 生成的是汇编代码(文本) 汇编 gcc -c *.c -o *.o*.s → *.o 生成的是二进制代码(文本) 链接 gcc *.c -o *生成的是二进制代码 C语言的基本结构
一个简单的C语言程序
功能:要求在控制台输出“hello world!”
代码:
#include <stdio.h> // 主函数:一个.c文件只能有一个main函数,这个函数是程序的入口 int main() { // 向控制台输出hello world! printf("hello world!\n"); return 0; }
程序结构分析:
-
注释:解释代码逻辑,写给程序员自己看,预处理阶段会被删除。
-
预处理指令:程序中包含的某一文件内容(
#include <stdio.h>) -
主函数:
main函数是程序唯一的入口,一个文件中最多有1个,这个函数不能被其他函数调用,这是一个自动执行的函数,系统是通过这个函数的指针进行访问的。 -
关于函数:
-
函数头:(函数首部或者函数说明)
说明函数类型,函数头由函数名和形参列表构成。
-
函数体:
包括变量说明和语句执行部分。
-
-
函数调用语句:比如:printf()
C语言编程规范要求
C语言在编程的时候,需要遵循如下规范:
-
常用的缩进格式(一般缩进2~4个字符,推荐缩进4个字符,我们Vim配置的是缩进4个字符,也就是一个
Tab键) -
要有足够的注释(添加必要的注释,使代码更好理解)
-
要有合适的空行(一般预处理指令和函数之间,函数和函数之间,全局变量和函数之间...,加空行提高代码可读性,使代码结构清晰)
#include <stdio.h> #include <stdlib.h> #define PI 3.14 #define R 2 int fun() { printf("A\n"); } int main(int argc,char *argv[]) { printf("hello world!\n"); fun(); return 0; }
-
{}对齐(C和C++{和}都需要独占一行,千万不要受Java影响)Java
int fun() { ... } C/C++ int fun() { ... } -
函数体内采用分层缩进和模块化的书写方式。
int fun() { if(..) { for(..) { printf("hello\n"); } } if(..) { for(..) { printf("hello\n"); } } } -
不把多条语句写在程序的同一行上(最好的区分是,不要在同一行连续出现多个
;,for循环(;;)除外)int main() { // 错误写法(不影响编译,但是影响阅读体验) printf("hello"); printf("hello"); printf("hello"); // 错误写法(不影响编译,但是影响阅读体验) int a = 10; int b = 20; // 正确写法 for (;;) { ... } } -
标识符命名要见名知意。
int main() { // 创建3个变量,用来存储年龄、身高、体重 // 错误演示(不影响编译,但是影响阅读体验) int a = 21; int b = 168; int c = 190; // 正确演示 int age = 21; int height = 168; int weight = 190; }
C语言程序的设计特点
C语言程序在设计的时候,需要注意以下细节:
-
C程序有一个或多个函数组成,但有且仅有一个main函数;这个函数是程序的入口函数,可以置于任意位置,建议放在所有函数的最下面。
-
程序中可以有预处理指令(
#include、#define),预处理指令通常放在程序的最前面。 -
每个语句以分号结尾:(注意:
预处理,函数头,函数、分支语句、while和for语句后面不能添加分号,否则会报错) -
函数体由一对
{}括起来,函数的{}不能省略。 -
包含在
/*..*/内,或者//..后面的文本为注释内容,在预处理阶段删除。 -
一行可以写多个语句,一个语句可以写在多行上。
int main() { // 一行可以写多个语句 int a, b, c; // 一个语句写在多行上 while(1) { ... } }// 格式化笔记中的代码:shift + tab
C语言中的注释
在C语言中,注释一般分为两类:单行注释和多行注释
注释的作用:给代码添加解释说明性文字,提升代码的可读性,注释本身不参与编译,在预处理阶段会被删除。我们同时也可以使用注释屏蔽掉暂时不需要的代码。
单行注释
说明:单行注释使用双斜杠
//..表示。我们一般用于变量、常量、函数调用语句等。语法:
// 需要注释的内容
范例:
// 预处理指令,引入系统的标准输入输出库 #include <stdio.h> int main() { // 向控制台打印输出 hello world! printf("hell world!\n"); return 0; }多行注释
说明:多行注释使用双斜杠星花
/*..*/表示。它可以占用一行,也可以占用多行,但不能嵌套。我们一般用于函数,文件头说明等。语法:
/* 要注释的内容 */ /* 要注释 的内容 */ 范例: /* 主函数 */ int main() { ... }注意:由多行注释衍生出一种更为细致的注释,我们称之为文档注释
范例:
/** * 主函数 * @author 开发者 * @param 参数1 说明 * @param 参数2 说明 * @return 返回值 */ int main() { ... }
-
更多推荐

所有评论(0)