0721 宏&分文件编译&typedef的用法&Makefile文件的编辑

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.牛客网刷题