黑马程序员IOS-C语言-预处理、define和typedef

本文详细介绍了C语言预处理指令的使用方法,包括宏定义、条件编译、文件包含等核心概念及其区别,旨在帮助开发者提升代码的可读性和效率。

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

——- android培训、java培训、期待与您交流! ———-


预处理指令:编译C语言之前,先对预处理指令做解释

所有预处理指令都以符号'#'开头,并且结尾不用分号
预处理指令可以出现在程序的任何位置,且有作用范围

预处理指令主要有
1.宏定义
    a> 不带参数的宏定义:
    b> 带参数的宏定义
2.条件编译
3.文件包含

宏定义

a.不带参数的宏定义 : 将源程序中所有”宏名”替换为右边的”字符串”,常用来定义常量

形式:#define 宏名 字符串

注意:宏名一般都用大写字母,且对程序中”“号括住的同名宏名不会替换


b.带参数的宏定义:将源程序中所有宏名替换成字符串,并且将字符串中的参数用宏名右边参数替换

形式:#define 宏名(参数列表) 字符串

注意:宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串
    带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作,所以为了防止展开后出现计算错误一般用小括号括住字符串的参数并且将计算结果做好也用括号括起来。

宏定义与函数的区别

1> 宏定义不涉及存储空间的分配、参数类型匹配、参数传递、返回值问题
2> 函数调用执行在程序运行时,而宏替换只在编译预处理阶段。所以带参数的宏比函数效率更高

条件编译:部分代码只有在条件成立时才进行编译,否则不参与编译(参与编译的代码才会被执行)

形式:

#if 条件1
    ...code1...
#elif 条件2
    ...code2...
#else
    ...code3...
#endif

:: #if 和 #elif 后面的条件一般是判断宏定义而不是判断变量。编译时期没有变量。

另外还有 #if defined() 和 #if !defined()
与其对应有 #ifdef 和 #ifndef 用法一致


文件包含: #include ,其功能为将一个文件的全部内容拷贝到另一个文件中

形式
1> #include <文件名>   直接到 C语言库函数头文件
2> #include "文件名"   到 源程序当前目录->操作系统path路径->C语言库函数头文件
注意:#include 指令允许嵌套包含,但是不允许递归包含

使用 #include 可能导致多次包含同一个头文件,降低编译效率

理解:
首先 #include 导入的是函数的声明
而通过条件编译限制的是声明文件:.h文件

思路如下:
在 .h文件 开头: #ifndef 文件名大写_H      //判断 文件名大写_H 这个常量不存在吗?
执行语句为1 :    #define 文件名大写_H    //不存在,执行预处理定义一个该常量
执行语句为2 :    函数的声明;              //并且声明函数;
在 .h文件 结尾: #endif            //条件编译结束

typedef : 为各种数据类型定义一个新名字(别名)

使用:
1> 基本数据类型
2> 指针
3> 构造体
4> 枚举

格式: typedef 已经存在的类型 新名字;

5> 指向函数的指针 :这是一个例外

格式: typedef 返回值类型 (*别名)(参数类型表,不需要变量名);

typedef 和 #define 的区别

typedef : 相当于定义了一种新的类型
#define : 纯粹是字符串替换

例如:

char * str1,st2;
typedef char *String ;
#define String char *

——- android培训、java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值