宏常量
#define 宏名 常量
宏在使用时,是原样替换
宏函数
#define 宏函数名(参数1,参数2) 表达式
字符串化运算符#
如果在宏调用时,需要把参数转换为字符串去处理,需要在参数前添加#
不定参数宏
C99标准中规定,允许用户定义有省略号的宏。省略号必须放在参数列表的后面,表示可选参数。你可以用可选参数来调用这类宏。在代码中用...代表。他们被保存到__VA_ARGS__中.__VA_ARGS__ : 用于在宏替换部分中,表示可变参数列表;
条件编译
一,命令行参数
其中 argc是命令行中参数的个数
args分别代表命令行中的参数
新代码注释
格式1
格式2
宏是否定义的判断
格式1
格式2
注意:条件编译在多文件编程中经常会用到
typedef
给一个已经存在的类型取别名,可以通过别名来定义变量
多文件编程
extern功能 :声明变量或函数是来源于其他文件的全局变量或局部变量
使用方法
gcc *.c同时编译多个文件
多文件编程框架
自己定义的头文件用双引号,系统定义的用箭头 #include“head.h“
1. 头文件 xxx.h
2. 功能文件 : xxx.c主要存放用户编写的逻辑代码函数,不包括main函数
3. 组合逻辑的文件 : main.c用于组合功能文件提供的函数接口
添加#ifndef的必要性
会导致x和y的重复定义(在head1中定义了一次,在head2中又定义了一次)
结构体类型的声明
结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同类型的变量。
结构体成员可以是普通变量,数组,指针,甚至是其它的结构体。
结构体变量及初始化
使用结构体类型,创建该类型对应的结构体变量
{
struct ***(结构体标签) stu;
strcpy(stu.**,"***");
stu.***= 30;
stu.**** = 8;
}
特殊的声明
在声明结构体的时候,可以不完全声明
声明了一种结构体,实际上就是定义了一种类型(自定义数据类型)
结构体是一种复杂的数据类型,是自定义数据类型
推荐赋值方法
结构体的自引用
在结构体中不能包含一个类型为该结构体本身的成员
正确的自引用方式为存放结构体指针类型的变量
结构体成员访问
注意:修改结构体变量的属性