C语言基础13

复习:
预处理指令:
C代码不能直接被编译器编译,需要一段程序把它翻译一下,负责翻译的程序叫作预处理器,,翻译的过程叫预处理,被翻译的语句叫预处理指令,以#开头都是预处理指令。
gcc -E code.c 查看预处理结果
gcc -E code.c -o code.i 把预处理的结果保存在文件中。

1、文件包含
#include 把一个头文件导入到当前文件中。
#include <> 从系统指定的路径查找并导入头文件。
#include “” 先从当前路径下查找,如果没有再从系统指定的路径查找关导入头文件。
系统是通过设置环境变量、编译参数-I来指定头文件的查找路径。
2、宏常量
#define 宏名 字面值数据
如果在代码使用了宏,在预处理时会把所有宏替换成宏名后的字面值数据。
优点:提高可扩展性,提高可读性、提高安全性,还可以与case配合使用。
注意:宏名一般全部大写,末尾不能加分号,不能直接换行(可以使用续行符)。
预定义的宏:
FILE
func
LINE
DATE
TIME
3、宏函数
#define FUNC(arg) arg*10
不是真正的函数,就是带参数的宏,使用宏函数的位置会被替换成宏函数后面的代码,提供的参数会被替换相应的位置。
注意:可以使用续行符和大括号来保护代码。
二义性:由于处理的位置或参数不同宏函数有多种功能,这种叫宏函数的二义生,可以在最外层加括号、每个参数加括号来降低产生二义性的可能 。
运算符:
# 把宏函数的参数变成字符串
## 合并两参数变成标识符
4、条件编译
根据条件决定是否生成代码或生成那部分代码。
#if/#elif/#else/#ifdef/#ifndef/#endif

头文件卫士:
#ifndef FILENAME_H
#define FILENAME_H
#endif//FILENAME_H
版本控制:
#if VERSION >=3
#elif VERSION >=2
#elif VERSION >=1
#else
#endif
判断器编译:
#if __cplusplus
// C++编译器
#else
// C编译器
#endif
系统位数判断:
#if x86_64
printf(“64位系统\n”);
#elif i386
printf(“32位系统\n”);
#endif
5、常考的笔试面试题
定义一个宏表示一年有多少秒,忽略闰年问题。
#define YEAR_SEC (365243600u)

在类型重定义时#define与typedef的区别?

在定义常量时#define与const的区别?

宏函数与普通函数的区别?

头文件中应该写什么
问题1:头文件可能被任何源文件包含,意味着头文件中的内存会在多个目标文件中存在,合并时不能冲突。
重点:头文件中只编写声明语句,不能有定义语句。
全局变量声明
函数声明
宏常量
宏函数
typedef 类型重定义
结构、枚举、联合的类型声明

头文件的编写原则:
1、对每个.c文件写一份.h文件,.h文件是对.c文件的说明。
2、如果需要用到某个.c文件的变量、函数、宏,只需要把它的头文件导入。
3、.c文件也叫导入它的.h 目的是让声明与定义一致。

头文件的互相包含:
假如a.h包含的b.h,b.h又需要包含a.h,这种情况编译就会出错。
解决方案就是把a.h中需要的内容和b.h中需要的内容提取出来,编写一个c.h。

错误:未知的类型名’xxxx’ 一般都是头文件互相包含导致的。

Makefile
Makefile是由一系列编译指令组成的可执行文本文件,也叫编译脚本。
在终端执行make命令会自动执行Makefile脚本中的编译指令,它可以根据文件的修改时间来判断那些文件需要编译,那些不需要从面提高编译效率。

编译规则:
1、如果此项目没有编译,则编译所有.c文件,并链接成可执行程序。
2、如果某个.c文件被修改,则此次只编译修改过的.c文件并链接。
3、如果某个.h文件被修改,依赖它的所有.c都要重新编译并链接。

一个最简单的Mafile脚本:
执行目标:依赖
编译指令
被依赖的目标1:依赖的文件
编译指令
被依赖的目标2:依赖的文件
编译指令

负责清理的执行目标:
rm …
2048游戏:
文件规则:
main.c 程序入口
game2048.c game2048.h 游戏的业务逻辑
direction.c direction.h 方向键处理
tools.c tools.h 工具函数
创建脚本:project_create.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值