学习记录:第三周day04笔记

预处理指令分类:

条件编译

根据条件决定让代码是否参与最终的编译

版本控制、代码注释

#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

要求数据存储在堆内存中

posted @ 2023-04-18 10:35  菊里菊气  阅读(50)  评论(0编辑  收藏  举报