二、编译器
负责把人能看得懂的用代码记录的文本文件,翻译成计算机能看懂的二进制文件,由预处理器、编译器、链接器
gcc是由gnu社区为了编译Linux内核代码而开发一款免费的编译器,默认采用C89编译语法, -std=gnu99 可以设置为C99语法
gcc code.c -> a.out(可执行文件、二进制文件)
常用的参数:
-E 显示出预处理结果
-S 生成汇编代码
-c 只编译不链接
-o 设置编译结果的名字
-std= 设置编译语法
-I 指定头文件的加载路径
-l 指定要使用的库文件libm.sc(-lm)
-Wall 更严格地检查代码,尽可能得产生警告
-Werror 把警告当错误处理
三、C代码源文件编程可执行文件的过程
1、预处理:把源文件翻译成预处理文件
gcc -E code.c 把预处理结果打印到终端
gcc -E code.c -o code.i 生成以.i结尾的预处理文件
2、编译:把预处理文件翻译成汇编文件
gcc -S code.i 生成以.s结尾的汇编文件
3、汇编:把汇编文件翻译成二进制的目标文件
gcc -c code.s 生成以.o结尾的二进制文件
4、链接:把若干个目标文件合并生成一个可执行文件
gcc a.o b.o ... 默认生成a.out可执行文件
四、C语言文件类型
.h 头文件
.h.gch 头文件的编译结果,它会被优先使用
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.so 共享库文件
.a 静态库文件
五、数据类型
为什么要对数据进行分类:
1、现实社会中的数据就是自带类别属性
2、对数据进行分类可以节约存储空间、提高运行效率
存储空间的单位:
Bit 比特 一个二进制位,只能存储0或者1,计算机存储数据的最小单位
Byte 字节 八个二进制位,计算机存储数据的基本单位
Kb 1024字节
Mb 1024kb
Gb 1024Mb
Tb 1024Gb
Pb 1024Tb
C语言中数据分为两大类:自建(程序员自己设计的:结构、联合、类)和内建(C语言自带的)
注意:可以使用sizeof运算符计算类型的字节数
内建:
整型:
有符号 signed
signed char 1 -128~127
signed short 2 -32768~32767
signed int 4 正负20亿
signed long 4/8
signed long long 8 正负9开头19位整数
注意:signed 不加就代表加
无符号 unsigned
unsigned char 1 0~255
unsigned short 2 0~65535
unsigned int 4 0~40亿
unsigned long 4/8
unsigned long long 8 0~以1开头的20位整数
注意:由于定义无符号数据时比较麻烦,标准库把这些无符号的类型重新定义成了以下类型:
使用时需要包含头文件:stdint.h
uint8_t int8_t
uint16_t int16_t
uint32_t int32_t
uint64_t int64_t
浮点型:
float 4
double 8
long double 12/16
注意:采用科学计算方法,二进制与真实数据时间需要进行换算,因此浮点型数据耗时要比整形数据多得多,编程时尽量选择整型
小数点后六位有效
time ./a.out 计算程序运行时间
注意:浮点数求余,编译错误
模拟型:
字符型char
字符其实就是符号或图案,内存中存储的是整数,当需要显示成字符时会根据ASCII码表中对应的关系显示出相应的符号或图案
' ' 0
'0' 48
'A' 65
'a' 97
布尔型bool
先有了C语言之后才有了bool类型,所以C语言中是不可能有真正的布尔类型,stdbool.h头文件对布尔类型进行了模拟
bool true false
可以使用sizeof()运算符计算类型、变量占用的字节数
例如:sizeof(int)
七、变量与常量
什么是变量:程序在运行期间数据可以变化的叫做变量,相当于储存数据的盒子
定义:
类型 变量名;
int num;
取名规则:
1、由字母、数字、下划线组成
2、不能以数字开头
3、不能与32个C语言的关键字重名
4、见名知义(功能、类型、范围...)
注意:变量的默认值是随机的,为了安全起见要进行初始化,一般初始化为0
使用:
赋值: num = 100;
参与运算: num * 10;
变量的输入、输出:
int printf(const char *format, ...);
功能:输出数据
format:"双引号包含的格式信息(提示信息+占位符)"
...:变量列表
返回值:输出字符的个数
类型占位符:C语言中通过类型占位符的方式来传递变量的类型
%hhd %hd %d %ld %lld 有符号
%hhu %hu %u %lu %llu 无符号
%f %lf %LF 浮点型
%c %s 字符型
int scanf(const char *format, ...);
功能:输入数据
format:"双引号包含的格式信息(占位符)"
...: 变量地址列表 &变量名
返回值:成功输入的变量个数
注意:scanf需要的是变量类型、变量地址
变量地址 = &变量名
常量
什么是常量:程序运行期间数据不能变化的叫常量
100 默认int
100u unsigned int
100lu unsigned long
100llu unsigned long long
100l long
100ll long long
3.14 默认double
3.14f float
3.14l long double
八、格式化输入输出
%nd 显示n个字符宽度,不够则补空格,右对齐
%-nd 显示n个字符宽度,不够则补空格,左对齐
%0nd 显示n个字符宽度,不够则补0,右对齐
%n.mf 显示n个字符宽度(小数点算一位),不够则补空格,m表示小数点后的位数(五舍六入)
%g 显示浮点型数据并且不显示小数点后多余的0



