第三周 day4

文章详细介绍了C语言中的预处理指令,如#define用于代码替换,typedef进行类型重定义。区分了#define与typedef在定义类型别名时的不同,以及宏函数与普通函数的功能和性能特点。还讨论了条件编译、头文件的使用规则和防止重复包含的策略,以及Makefile在构建过程中的作用和基本规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预处理指令:

#define

常见笔试面试题:

1、简述#define与typedef的区别

如果是普通类型,它们在功能上无任何区别,但本质不同,一个是代码替换,一个是类型重定义

#define INTP int*

INTP p1,p2,p3; //p1是指针,p2、p3是int

typedef int* INTP;

INTP p1,p2,p3; //p1p2p3都是指针

2、宏函数与普通函数的区别

是什么?

普通函数:是一段具有某项功能的代码集合,函数会被编译成二进制指令存储在代码段中,函数名就是它的首地址,有独立的栈内存

宏函数:带参数的宏替换,不是真正的函数,用起来像函数,没有独立的栈内存

有什么区别?

函数: 返回值、类型检查、安全、入栈出栈调佣,速度慢

宏函数:运行结果、通用、危险、替换、冗余、速度快

条件编译:

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

版本控制:

#if

#elif

#else

#endif

头文件卫士:防止头文件被重复包含,头文件必加

#ifndef 宏名 //如果宏名不存在为真

#define 宏名

//头文件内容

#endif

判断、调试:

#ifdef 宏名 //如果宏名存在为真

#else

#endif

在编译时添加宏DEBUG: gcc xxx.c -DDEBUG

头文件中应该写什么:

头文件可能会被任意源文件包含,意味着头文件中的内容可能会在多个目标文件存在,要保证合并时不要冲突

重点:头文件只编写声明语句,不能有定义语句

全局变量的声明

函数声明

宏常量

宏函数

typedef 类型重定义

结构、枚举、联合的类型设计声明

头文件的编写规则:

1、为每个.c文件写一份.h文件,.h文件是对它对应的.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脚本格式:

执行总目标:依赖

编译指令

被依赖的目标1:依赖的文件

编译指令

被依赖的目标2:依赖的文件

编译指令

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值