预处理指令分类:
条件编译
根据条件决定让代码是否参与最终的编译
版本控制、代码注释
#if
#elif
#else
#endif
#include<stdio.h>
#define VERSION 3
int main()
{
//版本控制
#if VERSION > 2
printf("最新版本!\n");
#elif VERSION > 1
printf("还凑活\n");
#else
printf("赶紧升级!\n");
#endif
//代码注释
#if 0
#endif
#if 1
#endif
}
头文件卫士:防止头文件被重复包含(写在头文件里)
#ifndef 宏名(大写文件名_H)
#define 宏名(大写文件名_H)
#endif
判断、调试
#ifdef 宏名
#elif
#else
#endif
#include<stdio.h>
//可以在编译时添加宏DEBUG:gcc 文件名.c -DDEBUG
#define DEBUG 1
int main()
{
int num=10;
int ret=scanf("%d",&num);
#ifdef DEBUG
printf("ret=%d\n",ret);
#endif
}
//打印调试信息
#ifdef DEBUG
#define debug(...) printf(__VA_ARGS__)
#else
#define debug(...)
#endif
//打印错误信息
#define error(...) printf("%s %s:%d %s %m %s %s\n",__FILE__,\
__func__,__LINE__,__VA_ARGS__,__DATE__,__TIME__)
头文件中应该写什么:
头文件可能会被任意文件包含,意味着头文件中的内容可能会在多个目标文件中存在,要保证合并时不要冲突
重点:头文件只编写声明语句,不能有定义语句
全局变量声明
函数声明
宏常量
宏函数
typedef 类型重定义
结构、枚举、联合的类型设计声明
头文件的编写规则:
1、为每个.c文件写一份.h文件,.h文件时对它对应的.c文件的说明(main.c头文件大部分情况可以不写)
2、如果需要用到某个.c文件中的变量、函数、宏时,只需要把该文件的.h导入即可
3、.c文件也要导入自己的.h文件,目的是为了让定义与声明保持一致
头文件的相互包含:
假如a.h包含了b.h的内容,而b.h中又包含a.h的内容,这时就会产生头文件的相互包含,无法编译通过
解决方案:把a.h中需要b.h的内容和b.h中需要a.h的内容提取出来,额外再写另一个c.h
Makefile:
Makefile是由一系列的编译器指令组成的可执行文件,叫做编译器脚本
在终端执行make命令就会自动执行Makefile脚本中的编译器指令,他可以根据文件的修改时间,和依赖关系来判断哪些文件需要编译,哪些不需要
一个项目工程只有一个Makefile文件,且没有其它任何后缀
Makefile的编译规则:
1. 如果这个工程没有编译过,那么我们的所有 c 文件都要编译并被链接。
2. 如果这个工程的某几个 c 文件被修改,那么我们只编译被修改的 c 文件,并链接目标程序。
3. 如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的 c 文件,并链接目标程
序。
/*
一个简单的Makefile脚本格式:
执行目标(target):依赖
编译指令(一定要Tab键开头)
被依赖的目标1:依赖的文件
编译指令
被依赖的目标2:依赖文件
编译指令
*/
CC=gcc
BIN=all
OBJ=main.o mail_book.o tools.o
FLAG=-Wall -Werror
STD=-std=gnu99
LINK=-lm
all:$(OBJ)
$(cc) -o $(BIN) main.o tools.o mail_book.o
main.o:main.c tools.h mail_book.h
$(cc) -c main.c
tools.o:tools.c tools.h
$(cc) -c tools.c
mail_book.o:mail_book.c mail_book.h tools.h
$(cc) -c mail_book.c
clean:
rm $(OBJ)
//
//偷懒的方法
CC=gcc
BIN=all
OBJ=main.o mail_book.o tools.o
FLAG=-Wall -Werror
STD=-std=gnu99
LINK=-lm
all:$(OBJ)
$(cc) -o $(BIN) $(OBJ) $(LINK)
%.o:%.c
$(CC) $(STD) $(FLAG) -c $< -o $@
clean:
rm $(OBJ)
2048游戏-多文件编程
文件规则
main.c 程序的入口
game2048.c game2048.h 游戏的业务逻辑功能
direction.c dirction.h 方向键处理功能
tools.c tools.h 工具函数
创建文件脚本:
project_create.sh
编辑文件脚本:
game2048.conf
编译脚本:
Makefile
要求数据存储在堆内存中
标签:__,文件,头文件,第三周,笔记,day04,编译,main,tools From: https://www.cnblogs.com/-xdj/p/17241399.html