C语言预处理

概念

预处理:在编译之前做的事情,在执行代码之前做一些代码的替换,提前处理


2 定义符号

2.1 含义:

预先定义好的一些宏,只要拿来就可以使用

2.2 内容:

printf("%s\n", __FILE__); //__FILE__:代表当前代码段所在的文件,是一个字符串
printf("%s\n", __FUNCTION__); //__FUNCTION__:代表当前代码段所在函数的函数名
printf("%s\n", __DATE__); //__DATE__:代表当前代码段的编译日期
printf("%s\n", __TIME__); //__TIME__:代表当前代码段的编译时间
printf("%d\n", __LINE__); //__LINE__:代表当前代码段所在文件中的行数

宏定义:

3.1 含义:

又称为宏替换,是使用某些特定的符号,在编译之前对源代码进行一个替换,从而完成某种功能

3.2 宏定义关键字:#define

3.3 格式:

#define 宏名 宏替换(注:是用宏名来替换宏替换,它们位置记牢),例:

#define PI 3.14(用PI来替换3.14,以下相同)
#define ENTER putchar('\n')// 使用ENTER代表putchar('\n')
#define D double// 使用D代表double

易语言:中文编程(数字)
#define 输出 printf
#define 输入 scanf
#define 主函数 main

带参宏

​​​​​​​4.1 含义:

带有参数的宏定义,可以像函数一样传递参数和调用

​​​​​​​4.2 内容:

//求正方形的周长
#define 周长(n)  n*4

//求矩形的周长
#define 矩形周长(n,m)  (n+m)*2

#define IP 3.14
//求圆的面积
#define 圆的面积(r)  IP*r*r //宏定义的嵌套:宏定义中又有宏定义

//带参宏给你挖的坑(重点)
1)	#define SUM(n,m) n+m
2)	#define SUM1(n,m) (n+m)
区别上述两个带参宏:
对于1):
SUM(1,2)* SUM(2,3)=1+2*2+3=8
对于2):
SUM1(1,2)* SUM1(2,3)=(1+2)*(2+3)=15
//归纳:宏定义称为宏替换:它只是替换而已,宏定义是先替换后计算(重点)

5 ​​​​​​​文件包含:

​​​​​​​​​​​​5.1 含义:

将其他文件的内容拿过来使用(一般是指头文件)

​​​​​​​5.2 内容:

  1. 文件/资源包含的预处理命令:#include,#pragma
  2. 包含系统头文件时,文件名可以使用<>尖括号括起来,也可以使用" "双引号括起来
  3. 规范包含系统头文件时,文件名一般使用<>尖括号括起来
  4. 规范包含自定义头文件时,文件名一般使用" "双引号括起来
  5. 在项目的使用查找中,一般使用<>尖括号括起来的文件,只会在系统头文件里找;使用" "双引号括起来的文件,会在自定义头文件里找,如果没找到才会在系统头文件里找

 ​​​​​​​5.3 ​​​​​​​头文件重复包含问题:

#include "test1.h"
#include "test1.h" //错误(头文件重复包含:同一个头文件包含两次或两次以上)
int main()
{

return 0;
}

 头文件重复包含可能会引起重定义问题
#include "test1.h" //头文件嵌套包含引起的头文件重复包含问题
为了防止头文件重复包含,在VS中一般使用预处理命令:#pragma once 解决
在自定义头文件的最前面第一行写上#pragma once可以解决头文件重复包含问题
#pragma once是VS独有的,其他平台不可用(VS是现在部分企业在用的编译工具)


6 ​​​​​​​条件编译:

​​​​​​​6.1 含义:

根据不同的条件来编译不同的代码段

​​​​​​​6.2 内容:

#if ……#else……#endif 的使用

#ifdef ……#else……#endif 的使用

#ifndef ……#else……#endif 的使用

​​​​​​​6.3 作用:

#ifndef ……#else……#endif 的使用:可以用于防止头文件重复包含 ,一般用于多头文件编写项目

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值