当前位置:首页 > C++目录 > 正文内容

C++中的宏

亿万年的星光4年前 (2022-01-24)C++目录2291

一、预处理和编译器

    首先,预编译器就是在编译器之前运行,换句话说,预编译器根据程序员的指示,决定实际要编译的内容。预编译器编译指令都以 # 开头。

例如:

1.
#include<iostream>

2.
#define ARRAY_SIZE=25
int a[ARRAY_SIZE]

3.
#define SQUARE(x) ((x)*(x))
int x=SQUARE(5)

本文主要说明用一是用宏定义常量,二是用宏定义宏函数。


二、使用#define定义常量

使用#define定义常量非常简单。

比如下面这样:

#include<iostream>
#define N 365
using namespace std;
int main(){
	cout<<N<<endl;
	return 0; 
}

常见的还有定义数组,

#include<iostream>
#define N 365
using namespace std;
int a[N]; 
int main(){
	cout<<N<<endl;
	return 0; 
}


三、带参数的宏定义

格式:

#define <宏名> (<参数表>) <宏体>

例子:

#define A(x) x

   一个标识符被宏定义后,该标识符便是一个宏名。这时,在程序中出现的是宏名,在该程序被编译前,先将宏名用被定义的字符串替换,这称为宏替换,替换后才进行编译。

例子1:求最大值

#include<iostream>
#define	MAX(a,b)((a)>(b)?(a):(b))
using namespace std;

int main(){
	int a=3,b=5;
	cout<<MAX(a,b);
	return 0; 
}

注意写法:不要丢掉括号。

除了写成一行,还可以写成多行。

比如,下面这个程序,可以用来判断是否是十六进制。

#include<iostream>
#define	HEXCHK( ch )\
(((ch) >='0'&&(ch)<='9') || \
((ch) >='A' && (ch) <='F') || \
((ch) >='a' && (ch) <='f'))
using namespace std;
int main(){
	char a='2';
	char b='@';
	cout<<HEXCHK(a)<<endl; //输出 1 
	cout<<HEXCHK(b)<<endl; //输出 0 
	return 0; 
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    最小生成树—基本概念

    一、最小生成树核心概念1. 基本定义一个带权无向连通图的最小生成树,是指从该图中选择若干条边,构成一个包含图中所有顶点的树结构(无环、连通),且所有选中边的权值之和最小。2. 关键性质生成树的本质:包...

    【数论】快速乘

    【数论】快速乘

    上一篇文章简单说了龟速乘的问题,有人觉得龟速乘还是太慢了,有没有什么办法再快一点,实际是有的,就是我们今天介绍的 快速乘。快速乘的原理和龟速乘不同,快速乘并不是基于二进制和位运算,严格来说,快速乘是利...

    C++读取磁盘文件

    0.前言简单介绍一下C++读取文件的基本操作。关键技术:freopen() 文件的打开函数 FILE *fp fp=fopen(文件名,使用文件方式) 例如: fp...

    【贪心】区间选点

    【贪心】区间选点

    【题目描述】数轴上有n个闭区间[ai, bi],取尽量少的点,使得每个区间内都至少有一个点。(不同区间内含的点可以是同一个,1<=n<=10000,1<=ai<=bi<=...

    如何判断回文数/回文串

    所谓回文,就是从左往右读和从右往左读都是一样的,这样的数字或者字符称为回文数/回文字符。做题的时候经常能看到判断回文操作。判断回文的一般有两种,一种是数字类型,一种是字符类型。两种分别介绍一下。一、回...

    拓扑排序

    拓扑排序

    一、定义对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则...