宏与预处理

#include 导入头文件
#if if判断操作符
#elif else if
#else else
#endif 结束if
#define 定义一个宏
#ifdef 如果定义了这个宏
#ifndef 如果没有定义这个宏
#undef 取消宏定义
#pragma 设定编译器的状态

#include <iostream>
using namespace std;

// 解决循环拷贝的问题,互相导入文件循环拷贝
#ifndef CPPCLIONPROJECT_SAFE_QUEUE_TOO_H  // 如果没有定义这个宏   一个if
#define CPPCLTONPROJECT_SAFE_QUEUE_TOO_H  // 定义一个宏
//第一次进来没问题
//第二次引用进来上门的宏判断就过不去,直接结束。
// 假设有几百行代码在这


#ifndef isRelease // 如果没有isRelease 这个宏     二个if
#define isRelease 0 //是否是正式环境 我就定义isRelease这个宏并且赋值0

#if isRelease == false 三个if
#define DEBUG// 测试环境下 

// 三个结束endif
#endif // 结束里面的if
#endif // 结束里面的if
#endif //CPPCLTONPROJECT_SAFE_QUEUE_TOO_H // 属于if范畴必须 结束if




#pragma once //防止重复写include的控制


int main(){
#if	1
	cout << "真" << endl;
#elif 0
	cout << "假" << endl;
#endif
	cout << "只要有if判断就必须写结束endif结束的宏" << endl;

#if DEBUG //是否定义了DEBUG这个宏
	cout << "测试环境" << endl;  // 前面定义了DBUEG宏,所以输出这个
#else RELEASE
	cout << "正式环境" << endl;
#endif // 结束

#ifndef ABCD // 如果没有这个宏就定义这个宏
#define ABCD // 定义这个宏
#ifdef ABCD  //是否定义了这个宏
	for (int i = 0; i < 6; ++i) {
		cout << "abcd 1" << endl;
	}

#undef ABCD // 取消这个宏,下面的代码就相当于没有定义ABCD这个宏了
#endif
#endif
	return 0;
}

宏预处理和替换

先简单了解C++的大概步骤

#include <iostream>
using namespace std;
// 假如上面的宏的定义在一个文件T1.h中
// 导入该文件,C++第一步预处理就是相当于把上面的那些代码copy到这里,这就是预处理
#include T1.h

#define a 1

int main(){
	// 执行第一步的时候进行宏替换,上面定义了a =1
	// 下面的代码会直接变成 int i = 1,这就是宏替换
	int i = a;
	return 0;
}

宏变量与宏函数

#include <iostream>
using namespace std;
// 在真实开发中,宏都是大写
#define VALUE_I 9527
#define VALUE_S "AAA"
#define VALUE_F 545.3F

//宏函数
#define SHOW(V) COUT << V << endl;

#define ADD(n1,n2) n1 + n2

//宏函数的注意事项
#define CHE(n1, n2) n1*n2


#define LOGIN(V) if(V==1) { 	\
	cout << "满足" << endl;		\
} else {						\
	cout << "不满足" << endl; 	\	
}// \是换行, 这个是结尾,不需要加 \

int main(){
	// 预处理界面,宏会直接完成文本替换工作
	int i = VALUE_I;
	string s = VALUE_S;
	float f = VALUE_F;
	
	//类似模板函数,根据你的类型变化而变化
	SHOW(8);
	SHOW(8.0F);
	SHOW(8.99);
	int r = ADD(1,2);
	cout << r << endl;
	r = ADD(1+1,2+2);// 6
	
	// 我们认为是8,其实r = 5
	// 文本替换之后 1+1*2+2 = 5
	r = CHE(1+1,2+2); 

	// 宏函数优点,不会有函数进栈弹栈,直接是文本替换
	// 缺点,文本替换导致体积增大,调用一次是文本替换一次
	LOGIN(0);
	LOGIN(0);
	LOGIN(0);
	LOGIN(0);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值