Part 1.整理思维导图

一.宏
1.定义:
#define 宏名 宏体
2.宏函数
a.格式
#define 宏函数名(参数1......) 宏体
b.例子(计算最大值)
#define MAX(a,b) a>b?a:b
3.系统自带的宏函数
a.if endif
功能:判断宏是否为真,真则执行语句,否则则跳过
#if 宏名
C语句1;
.....
C语句n;
#endif
b.if else endif
功能:如果宏名为真则执行C语句1,否则C语句2
#if 宏名
C语句1;
#else
C语句2;
#endif
c.if elif else
功能:如果不正确则判断第一个elif,再不对则判断第二个往下推,都不对执行else
#if 宏1
C语句1;
#elif 宏2
C语句2;
#elif 宏3
C语句3;
....
#else
C语句n;
#endif
d.ifdef endif
功能:判断宏已经定义的,如果宏已经定义了,则执行C语句,否则跳过
#ifdef 宏名
C语句;
#endif
e.ifndef endif
功能:判断宏没有定义的,如果宏没有定义了,则执行C语句,否则跳过
#ifndef 宏名
C语句;
#endif
f.undef
功能:取消宏
#undef 宏名
g.##
功能:实现拼接
格式: ##
#define CAT(a,b) a##b
int num1=100;
printf("%d",CAT(num,1));
二.分文件编译
1.主函数文件
储存主函数
2.头文件
储存预处理命令,头文件,全局变量,结构体
3.自定义文件
储存自定义的函数
三.typedef
1.功能
类型名重新定义
2.格式
typedef 数据类型 重新定义的数据名
3.例子
给结构体变量重定义名字
cs
typedef struct student
{
int age;
char name[20];
float score;
}stu;
stu *p = (stu *)malloc(sizeof(stu));
四.Makefile
1.Makefile的作用
1.简化运行过程
2.文件没发生改变,则不重新编译,加快执行速度
3.根据时间戳是否发生改变判断文件是否发生改变
2.什么是Makefile
就是一个文件,用来存储快速编译的代码
3.Makefile代码
a.原代码
cs
all:main.out
#首规则
main.out:main.c head.c
gcc main.o head.o -o main.out
main.o:main.c
gcc -c main.c -o main.o
head.o:head.c
gcc -c head.c -o head.o
clean:
@rm main.o test.o main.out
执行过程就是执行main.out文件需要访问main.c和head.c文件,然后俩文件的执行代码再下面,逐步往下执行。
b.makefile的变量
EXE = main.out
CC = gcc
OBJES = main.o test.o
CFLAGS = -c -o
在文件上面定义,然后将下面代码改为这些变量
c.预定义变量
$@ :表示目标
$^ :表示所有的依赖
$< :表示第一个依赖
%: 模式匹配
然后将下面代码改为这些变量
d.Makefile内置函数
1.wildcard
功能:获取某一路径下的所有.c文件
$(wildcard *.c)获取该路径下的所有.c文件
2.patsubst
功能:(模式替换的) 把.c文件替换为.o文件
$(patsubst %.c,%.o,需要替换掉文件)将.c文件替换成.o文件
(patsubst %.c,%.o,(wildcard *.c))获取该目录下的所有.c文件
e.替换后的最终Makefile文件
cs
EXE = main.out
CC = gcc
OBJES = $(patsubst %.c,%.o,$(wildcard *.c))
CFLAGS = -c -o
all:$(EXE)
#首规则
$(EXE):$(OBJES)
@$(CC) $^ -o $@
%.o:%.c
@$(CC) $(CFLAGS) $@ $^
clean:
@rm $(OBJES) $(EXE)
Part 2.牛客网刷题