第七章
1.无参宏定义
形式:#define 标识符 字符串
“#”表示这是一条预处理命令;define为宏定义命令;
标识符为所定义的宏名;字符串可以是常数、表达式、格式串等
注意:宏定义只是简单代换(实事求是);
宏定义不是说明或语句,在行末不必加分号。
2.带参宏定义
形式:#define 宏名(形参表) 字符串
3.条件编译
#ifdef 标识符
程序段1
#else
程序段2
#endif
如果标识符已被#define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的else可以没有。
将#ifdef改为#ifndef:如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。
#if 常量表达式
程序段1
#else
程序段2
#endif
如果常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译
4.“##”被称为连接符,用来将两个Token连接为一个Token。注意这里连接的对象是Taken就行,而不一定是宏的变量。
5.结构体一般形式
struct 结构体名
{
类型名1 成员名1;
类型名2 成员名2;
类型名n 成员名n;
};
6.结构体与数组比较:
都由多个元素组成;
各个元素在内存中的存储空间是连续的。
数组中各个元素的数据类型相同,而结构体中的各个元素的数据类型可以不相同。
7.结构体上开始偏满足什么条件才可以使其成员全部对齐
保证结构体长度是原始成员最长分配的整数倍即可。
8.结构体(struct)和联合体(union)的区别:
在同一时刻,后者中存放的一个被选中的成员,而前者的所有成员都存在。
union变量的长度等于最长的成员的长度。
9.位段的定义格式为:
type [var]: digits
10.位段的使用注意点:
位段的类型只能是:int,unsigned int,signed int三种类型
无名位段不能被访问,但会占据空间
不能对位段进行取地址操作
位段不能出现数组的形式