当前位置:首页 > C++知识 > 正文内容

C++中的宏

亿万年的星光3年前 (2022-01-24)C++知识1130

一、预处理和编译器

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

例如:

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; 
}


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

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

分享给朋友:

相关文章

常见的数据范围

一、总结名称字节位数(二进制)最小值最大值位数(十进制)bool18011char18shrot 216    (-2^15  到2^15  -1)-...

【C++图形化编程】鼠标函数及鼠标画板

【C++图形化编程】鼠标函数及鼠标画板

0.前言这篇文章简单介绍一下利用鼠标画图的程序#include<graphics.h> #include<conio.h> int main(){ initg...

进制转换类问题汇总

二进制转十进制十进制转二进制十进制转M进制(M一般小于16)M进制转十进制M进制和N进制互转...

2021CSP-J/S全国晋级二轮分数线公布

普及组CSP-J序号省市CSP-J人数CSP-J晋级晋级比例最高分晋级最低分1甘肃13413399.25%86152宁夏10310198.06%65243天津46345197.41%8615.54云南...

【初级篇】函数(一)

【初级篇】函数(一)

0.函数的引入为什么要用函数呢?比较官方的说法是,过程的复用,你的一段逻辑,你有一段逻辑不断的在复用,就封装成函数去调用它。通俗的说法就是,把重复的过程集中到一块。例如,大家都学过如何求正方形的面积,...

【题解】最短路径问题

【题目描述】平面上有n个点(n≤100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现...