C++中的宏
一、预处理和编译器
首先,预编译器就是在编译器之前运行,换句话说,预编译器根据程序员的指示,决定实际要编译的内容。预编译器编译指令都以 # 开头。
例如:
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; }
(adsbygoogle = window.adsbygoogle || []).push({});