# C语言
# C语言入门
# C语言的由来
C 语言最初是作为 Unix 系统的开发工具而发明的。
1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了Unix 操作系统。Unix 是用汇编语言写的,依赖于计算机硬件。为了程序的可读性和可移植性,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言。
1972年,丹尼斯·里奇(Dennis Ritchie)在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,称为 C 语言 。
1973年, 整个 Unix 系统都使用 C 语言重写 。
# C语言版本
- K&RC K&R C 指的是 C 语言的原始版本。
- ANSI C(又称 C89 或 C90) 1989年,美国国家标准协会(ANSI)制定了一套 C 语言标准
- C99 C 语言标准的第一次 大型修订 ,发生在1999年,目前最流行的版本呢
- C11 2011年,标准化组织再一次对C 语言进行修订
- C17 C11 标准在2017年进行了修补,但发布是在2018年。
- C23 2023年预计发布,计划进一步增强安全性,消除实现定义的行为
# C程序运行机制
- 编辑 编写C语言源程序代码,并以文件的形式存储到磁盘中。源程序文件以“ .c ”作为扩展名。
- 编译 将C语言源程序转换为目标程序(或目标文件)。如果程序没有错误,没有任何提示,就会生成一个扩展名为“ .obj ”的二进制文件。C语言中的每条可执行语句经过编译后最终都将被转换成二进制的机器指令
- 链接/连接
将编译形成的目标文件“.obj”和库函数及其他目录文件连接/链接,形成统一的 可执行的 二进制文件“ .exe ”。
为什么需要链接库文件呢? 因为我们的C程序中会使用 C程序库的内容,比如<stdio.h> 、<stdlib.h> 中的函数printf()、system()等,这些函数不是程序员自己写的,而是C程序库中提供的,因此需要链接。链接后,生成的.exe 文件,比obj 文件大了很多。
- 运行 有了可执行的exe文件,我们可以在控制台下直接运行此exe文件。
# 如何运行一个程序
编写一个以后缀为.c的文件
#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; }
编译器安装 linux、Mac安装GCC,Windows系统安装MinGW
编译/链接
// 编译,生成hello.o文件 gcc -c Hello.c // 链接,生成a.exe文件 gcc hello.o // 如果想指定可执行文件名称,这样会生成hello.exe文件 gcc -o hello Hello.o // 这样太麻烦了,hello.o文件我们并不需要 // 去除-c参数,可直接生成a.exe可执行文件 gcc Hello.c
# 注释
- 单行注释
// 单行注释
- 多行注释(或块注释)
/* 这是第一行注释 这是第二行注释 这是第三行注释 */
/* 我是被注释的文字 */
# 代码规范
# 代码风格
- 正确的缩进和空白
- 使用一次tab操作,实现缩进,默认整体向右边移动。相反,使用shift+tab整体向左移
- 运算符两边习惯性各加一个空格。比如: 2 + 4 * 5 。
- 可以使用代码格式化快捷键 ctrl+alt+L。(在CLion中使用)
- 正确的注释和注释风格
- 如果注释一个函数,可以使用多行注释(或块注释)。
- 如果注释函数中的某一行语句,可以使用单行注释
# 代码细节剖析
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
- 每一个程序(或工程)可以定义很多函数(后面讲),但有且只有一个main()函数,作为程序执行的入口,int代表main()的返回类型,C语言约定
return 0
标志main()函数终止运行,且运行成功;如果返回其它非0整数,则表示运行失败。默认情况下,如果main()函数省略return 0,编译器会自动加上。 - 一对
{}
定义函数的主体,每一条执行语句后面跟一个;
作为语句结束标志。一行语句可以写在几行上,一行内也能写多条语句。 - printf()函数是产生格式化输出的函数,作用是将参数文本输出到屏幕。
- printf() 是在标准库的头文件
stdio.h
中定义的。要想在程序中使用这个函数,必须在源文件头部引入这个头文件。即:#include <stdio.h>
# 关于输出
# printf()标准格式
printf(格式控制字符串,输出列表);
其中,
- 格式控制字符串" 是用双引号括起来的一个字符串。包括:
- 普通字符:普通字符即需要在输出时原样输出的字符。
- 占位符:由“%”和格式字符组成。这个位置可以用其它值代入。
- "输出列表" 是程序需要输出的一些数据,可以是常量、变量或表达式。用于替换占位符的位置
# 占位符
占位符的第一个字符是 % ,第二个字符表示占位符的类型。 printf() 的占位符有许多种类,与 C 语言的数据类型相对应。 常用占位符:
- %c:char型数据
- %d:十进制整数(int)
- %f:浮点数(float)
- %ld:十进制整数(long)
- %lf:十进制浮点数(double)
- %p:指针
- %s:字符串
- %u:十进制无符号整数
# 变量与进制
# 关键字
全部都是小写字母