C语言宏的妙用(预处理器)

所有预处理指令都以符号#开头。此外,每个预处理指令必须单独占用一行。

1.#define

指令#define定义了一个标识符及一个字符序列(即字符集合)。在源程序中每次遇到该标识符时,就用定义的字符序列替换它。标识符被称为宏名,替换过程称为宏替换。例如:

#define datou_shuai 1
#define datou_bushuai 2

注意与const常变量替换作用的场景区分开

const int datou_shuai = 1在编译时起作用
#define datou_shuai 1在预编译时起作用
const 类型为浮点数时则是要从内存读数据

注意,该语句没有分号。在标识符和字符序列之间可以有任意个空格,但是一旦字符序列开始,就只能由一新行结束。
在这里插入图片描述

定义类似函数的宏

#include<stdio.h>
#define SUM(x,y) (x*y)
int main()
{
	int a = 5, b = 4;
	int sum = SUM(a+5, b+6);
	printf("%d \n", sum);
}
//计算时应该为a+5*b+6,即5+5*4+6=31

宏和函数的区别

1.宏在预编译时进行替换,函数编译和链接时形成代码
2.宏不存在现场的保护和恢复,函数要进行现场保护和恢复
3.使用时宏有副作用,可能会参数值
4.宏和类型无关,函数和类型有关

在这里插入图片描述

2.#include

指令#include告诉编译器除了读包含#include的一个源文件外还要读取另一个源文件,被读入的源文件必须用双引号或尖括号括起来。
文件名是用引号还足用尖括号括起来决定了指定文件的查找方法。如果文件名用尖括号括起来,则文件以编译器的创建者定义的方式进行在找,通常,这意味着从为“包含文件”设置的一些特殊目录中查
找。如果文件名用引号括起来,则文件以其他实现所定义的方式进行查找。对许多编译器来说,这意味着查找当前工作目录。如果未找到,则按文件名括在尖括号中的方式继续查找。
通常,许多程序员使用尖括号来包含标准头文件,引号的使用则是为了包含与程序关联的文件, 但这两种用法没有硬性的规定。

include的本质是将".h"中的内容拷贝到“.cpp”中。从而生成“.i”文件。
注:数组里使用 #include 时,#include要从写,且屁股后不可加内容,数字要用逗号隔开,而字符串每行都要用双引号引起来。例:

//主函数
	int ar[] = { 
#include"hyh.txt"   //hyh.txt内容 12 ,23, 34, 45, 56, 67 ,78, 89 ,100
	};
	char br[] = {
#include"nrj.txt"
    };
//niu.txt内容
"You are a dog\n"
"I an a man"

该方法也可以初始化过长的字符串。

最后插入个结构体大小计算图
在这里插入图片描述
用#define计算结构体大小
在这里插入图片描述
关于#ifndef的解释,预编译起作用。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值