当前位置:网站首页>标准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;后面加一。如果中间给了值,后面的加一
为什么要使用枚举?
为无意义的值取一个有意义的名字,提高代码的可读性,安全性(与变量相比)
边栏推荐
- In the anaconda Promat interface, import torch is passed, and the error is reported in the jupyter notebook (only provide ideas and understanding!)
- Vulnhub靶机:HA_ NARAK
- TRACE32——通用寄存器查看与修改
- Why does Mysql fail to create a database
- 不能比较或排序 text、ntext 和 image 数据类型
- Flink学习11:flink程序并行度
- Takeda Fiscal 2022 First Quarter Results Strong; On Track to Achieve Full-Year Management Guidance
- Cannot compare or sort text, ntext, and image data types
- 【instancetype类型 Objective-C】
- 开启防火墙iptable规则后,系统网络变慢
猜你喜欢
随机推荐
腾讯实习总结
Bluetooth gap protocol
Technical Analysis Mode (8) Double Top and Bottom
二叉搜索树问题
专用机终端安装软件后报IP冲突
怎么样避免线上内存泄漏
[上海]招聘.Net高级软件工程师&BI数据仓库工程师(急)
UDP broadcast
360度反馈调查表中的问题示范
Rapid Medical's Ultra-Small and Only Adjustable Thromb Retriever Receives FDA Clearance
GAN生成动漫头像Pytorch
Vulnhub靶机:HA_ NARAK
Redis数据库学习
【Go】IM系统Centrifugo
【Dynamic type detection Objective-C】
不能比较或排序 text、ntext 和 image 数据类型
访问被拒绝:“microsoft.web.ui.webcontrols”的解决办法
基于KECA-IGWO-KELM的间歇过程故障诊断方法
Cannot compare or sort text, ntext, and image data types
2022 crane driver (limited bridge crane) exam question bank and simulation test








