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

C++中的宏

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

一、预处理和编译器

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

例如:

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


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

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

    分享给朋友:

    相关文章

    【题解】小X玩游戏

    【题目描述】小X喜欢玩游戏。  这天,小X觉得传统的游戏都玩腻了,自己随手在草稿纸上画了一行N个格子作为棋盘, 制定了如下规则:格子从左到右依次编号为1到N,玩家初始位于格子1,初...

    【数据结构】栈—表达式括号匹配

    【数据结构】栈—表达式括号匹配

    【题目描述】假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则...

    排序算法中的一些分类

    排序算法中的一些分类

    一、比较和非比较的排序二、时间复杂度和稳定性如何界定一个排序算法是否是稳定的?假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=...

    【STL】二分查找函数(算法)—binary_search

    【说明】binary_search() 实现了一个二分查找算法。它会在前两个参数指定范围内搜索等同于第三个参数的元素。指定范围的迭代器必须是正向迭代器而且元素必须可以使用 < 运算符来比较。这个...

    求阶乘的方法

    1.普通求法#include<iostream> using namespace std; int main(){ int sum=1;...

    【数据结构】优先队列(1)

    优先队列(Priority Queue)是一种特殊的队列,它 不遵循“先进先出”(FIFO) 的原则,而是 按照优先级(Priority) 来出队。优先级高的元素 先出队,优先级低的元素 后出队。1....