0712
gcc编译器:
1. 编译hello.c文件默认生成a.out文件
gcc hello.c
2. 编译分为4个流程步骤:
1.预处理:
将C语言代码展开(处理程序中与#号相关的代码)
#include <stdio.h>
将头文件stdio.h展开到代码中
#if
#elif
#else
#endif
#ifndef
#ifdef
根据条件编译规则将符合条件的代码加入到编译中,不符合条件的代码从编译中去除
#define
宏完成替换
gcc -E hello.c -o hello.i
2.编译:
将C语言代码编译成汇编代码
gcc -S hello.c -o hello.s
3.汇编:
将汇编代码编译成二进制代码
gcc -c hello.c -o hello.o
4.链接:
将二进制代码链接成为可执行程序
gcc hello.c -o hello 这个hello视为名称
执行代码时 ./hello (./后面接这个名称即可)
3. 程序错误:
1.语法错误
1.每次编译代码都寻找第一个错误并修改,直到错误完全解决为止
2.错误分为:error、warnning
error:无法生成可执行程序
warning:可以生成可执行程序,但程序中有可能出现错误
2.逻辑错误
1.加入打印解决问题 printf=如果未打印则确定问题行
2.gdb调试器
gdb调试器:
1.编译代码时必须加-g选项,允许GDB调试
gcc filename.c -g
2.使用gdb调试代码
gdb ./a.out
3.输入命令完成GDB调试
l 查看代码
b 函数名/行号 设置断点
r 运行代码
n 单步执行
c 继续执行到下一个断点
p 变量名 查看变量值
s 进入函数内部调试
q 退出
查看代码 -> 设置断点 -> 运行代码 -> 单步执行
C语言:
1. 进制转换:
二进制、八进制、十进制、十六进制
十进制 -> 二进制、八进制、十六进制:
十进制数除以进制数得到的余数逆序排列
重点掌握十进制和二进制彼此转化,其他进制了解即可
2. 负数在内存中的存储
以补码的形式存储
1.先获得原码(去掉符号位,数字对应的二进制形式)
2.获得反码 (原码取反)
3.获得补码(反码+1)
4.获得内存中的值(符号位+补码)
3. 程序在计算机内部如何运行:
存储器:分内存和外存
a.out是存放在外存中的一个文件
./a.out时将该文件加载到内存中运行,内存负责与CPU交互执行代码内的运算处理
4.计算机内存的存储单位:
bit 1byte = 8 bit 1 kb = 1024 byte mb gb tb
基本数据类型、运算符、表达式:
1.数据类型:
1.基本数据类型
整数类型
浮点数类型
字符型
缺省类型
逻辑类型
2.构造数据类型
结构体
共用体
枚举类型
C语言在不同的平台上运行结果是不一样的
Ubuntu 64位操作系统
sizeof 关键字
整数类型表
整数类型 | 内存空间所占字节数 | 存储方式 | 值域范围 |
unsigned short无符号短整型 | 2 | 16位均表示数据位(数据对应的二进制形式) | 0 - 65535 |
short 短整型 | 2 | 1位符号位+15位数据位(数据的补码) | -32768 - 32767 |
unsigned int无符号整形 | 4 | 32位均表示数据位(数据对应的二进制形式) | 0 - 2^32 -1 |
int 整形 | 4 | 1位符号位+31位数据位(数据的补码) | -2^31 - 2^31 -1 |
unsigned long无符号长整型 | 8 | 64位均表示数据位(数据对应的二进制形式) | 0 - 2^64 -1 |
long长整型 | 8 | 1位符号位+63位数据位(数据的补码) | -2^63 - 2^63 -1 |
整数类型不标注默认为有符号类型
2.字符类型:
unsigned char 无符号字符型 1个字节 0 - 255
char 有符号字符型 1个字节 -128 - 127
字符 -> ASCII码表 -> 二进制数据 -> 存放内存
ASCII码表:字符和二进制数据间的转换关系
eg
'A' -> 65
'a' -> 97
3.浮点数类型:
float 单精度浮点数类型 4个字节 1位符号位 + 8位指数位 + 23位尾数位
double 双精度浮点数类型 8个字节 1位符号位 + 11位指数位 + 52位尾数位
1.浮点数类型均为有符号
2.float 6-8位有效数字、不能用“==”判断两个数字是否相等 double 12-14位有效数字,可以用“==”判断两个数字是否相等
3.常量和变量:
1.常量
在程序运行过程中值不会发生改变的量
1.整形常量(默认为int类型)
2.浮点型常量(默认为double类型)
3.字符常量
4.字符串常量
"hello world"
"a" == 'a' + '\0'
'a' == 'a'
字符串末尾有一个用来标识结尾的\0字符
5.标识常量
#define 宏名 值
#define PI 3.1415
注意:
1.标识常量宏名一般都是大写,与变量名区分
2.宏只是实现代码替换,中间不进行任何数据计算的操作(宏定义,能加括号就加括号)
3.使用宏能够提高代码的可读性
2.变量
在程序运行过程中值可以发生改变的量