当前位置:网站首页>标准C语言15
标准C语言15
2022-08-05 06:54:00 【洛cs】
三十五、Makefile
Makefile是由一系列编译指令组成的可执行文本文件,也叫编译脚本;
在终端执行make命令,就会自动执行Makefile脚本文件中的编译指令,它可根据文件最后的修改时间来判断
哪些文件需要重新编译、哪些文件不用重新编译,从而提高效率
编译规则:
1. 如果这个工程没有编译过,那么我们的所有 c 文件都要编译并被链接。
2. 如果这个工程的某几个 c 文件被修改,那么我们只编译被修改的 c 文件,并链接目标程序。
3. 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的 c 文件,并链接目标程序。
一个最简单的Makefile格式:
执行目标:依赖
编译指令
被依赖的目标1:依赖文件
编译指令
三十六、结构 struct
结构是一种由程序员自己设计的数据类型,用于描述一个事物的各项特征数据,
有若干个不同的基础类型组成。
设计:
struct 结构类型名
{
类型 成员名1;
...
};
定义结构变量:
struct 结构类型名 结构变量名;
注意:struct在C语言中,定义变量是,不能省略。
struct Student stu; //结构变量
struct Student* sp; //结构指针
定义结构变量并初始化:
顺序:
struct 结构类型名 结构变量名 = {v1,....};
初始化顺序一定要与成员顺序一致
指定:
struct 结构类型名 结构变量名 = {.成员名 = v2,....};
顺序无关
注意:这种赋值方式只能在定义时使用;同类型的结构变量可以直接给另一个初始化。
主体:
相同的结构变量,可以直接初始化
访问成员:
结构变量名.成员名;
由于结构变量的字节数一般都比较大,普通的值传递非常慢,因此传递结构变量的地址,即传递
结构指针变量,用 结构指针变量名->成员名
typedef重定义结构类型名
在C语言中struct enum union 关键字在定义变量不能省略,可以使用typedef进行类型重定义,
typedef struct 结构类型名 结构类型名;
typedef struct 结构类型名
{
/* data */
} 结构类型名;
计算结构体的总字节数:
结构成员顺序会影响总字节数,因此能够在设计结构体时合理安排成员顺序,可以节约内存
内存对齐:
假设:
第一个成员从零开始,存储每个成员的地址编号必须能被该成员的类型字节数整除。
不足填充空白字节。
内存补全:
结构体的总字节数,必须是它最大成员字节数的整数倍,如果不能被整除,最后补空白字节
在Linux、UNIX32位系统下计算结构体的对齐,补全时,成员字节数超过4,则按照4字节对齐补全
windows按实际字节数对齐补齐。
#pragma pack(n) //可以设置按()里的字节补齐,n<4(1,2,4)
注意:结构体适合使用堆内存存储
三十七、联合 union
联合与结构使用方法基本一致,与结构的区别是联合是所有的成员共用一块内存,一个成员的值改变,其他也会改变。
联合的效果就是使用少量的内存对应多个标识符,节约内存,但是现在几乎不使用了
union Data
{
char ch[5];
int num;
};
注意:计算联合总字节时,不需要考虑内存对齐,但要考虑字节补齐
如何判断系统的大小端?
假设:十六进制 0x01020304, 存储在0x0A~0x0D范围的4字节内存中
大端系统:高位数据存储在低位地址 (0x0D:0x04 0x0C:0x03 0x0B:0x02 0x0A:0x01)
小端系统:高位数据存储在高位地址 (0x0D:0x01 0x0C:0x02 0x0B:0x03 0x0A:0x04)
个人计算机一般都是小端系统,而UNIX服务器和网络设备都是大端。
实现一个程序,判断系统大端还是小端
#include <stdio.h>
union Data
{
char ch;
int num;
};
int main(int argc,const char* argv[])
{
union Data d = {d.num = 0x01020304};
printf("%hhd",d.ch);
}
三十八、枚举 enum
枚举就是一种数据类型,把可能出现的所有值罗列出来,并起一个有意义的名字,表示这些值,
除此之外给该类型的变量赋其他值,是非法的(愿望)
枚举可以看做一种值受限制的int类型,但是C编译器为了效率不检查,所有在C中枚举相当于int类型变量。
如果不给成员值,那么枚举中的第一个默认为0;后面加一。如果中间给了值,后面的加一
为什么要使用枚举?
为无意义的值取一个有意义的名字,提高代码的可读性,安全性(与变量相比)
边栏推荐
猜你喜欢

binary search tree problem

Falsely bamboo brother today and found a localization of API to use tools

typescript60-泛型工具类型(readonly)

Using printf function in STM32

TRACE32——通用寄存器查看与修改

typescript66-分析partial的实现

字节面试流程及面试题无私奉献,吐血整理

2022起重机司机(限桥式起重机)考试题库及模拟考试

Japan Sanitary Equipment Industry Association: Japan's warm water shower toilet seat shipments reached 100 million sets

2022 Fusion Welding and Thermal Cutting Operation Certificate Exam Questions and Mock Exams
随机推荐
数据库多表关联插入数据
MySQL:order by排序查询,group by分组查询
线程池的使用(结合Future/Callable使用)
typescript63-索引签名类型
基于快速行进平方法的水面无人船路径规划
Bluetooth gap protocol
Technical Analysis Mode (7) Playing the Gap
693. 行程排序
After the firewall iptable rule is enabled, the system network becomes slow
Modeling of the MAYA ship
protobuf is compiled against the associated .proto file
MySQL: order by sorting query, group by grouping query
typescript66-分析partial的实现
360度反馈调查表中的问题示范
Hash these knowledge you should also know
Advanced Redis
【 LeetCode 】 235. A binary search tree in recent common ancestor
IO process thread -> communication between processes -> day7
《基于R语言的自动数据收集》--第3章 XML和JSON
给网站套上Cloudflare(以腾讯云为例)