宏定义:
1.不带参数的宏定义:
格式:
#define 标识符 字符串
其中的标识符就是所谓的符号常量,也称为“宏名”。
预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。
例: 求半径为2的圆面积
#include "stdafx.h"
#define _M_ 3.1415926*2*2 //定义
//判断有无占用
#ifndef _M_ //如果没有定义(前面定义了_M_)
#define _M_ 3.1415926*2*2 //则定义(这就不用定义了)
#endif //结束
//#ifdef _M_ ------ 如果定义了
//#define _N_ 3.14159236 -------则替换
//#else
//#endif -------结束
int _tmain(int argc, _TCHAR* argv[])
{
printf("%f",_M_(3));
return 0;
}
输出:12.566370
- 宏名一般用大写
- 宏定义末尾不加分号;
- 宏定义可以嵌套
- 字符串" "中永远不包含宏
- 宏定义不分配内存,变量定义分配内存。
2.带参数的宏:
格式:#define 宏名(参数表) 字符串
例如:
#include "stdafx.h"
//判断有无占用
#ifndef _M_ //如果没有定义
#define _M_(r) (2+r) //则定义
#endif //结束
int _tmain(int argc, _TCHAR* argv[])
{
printf("%d",_M_(1)*_M_(1));
return 0;
}
输出:9
- 宏名和参数的括号间不能有空格
- 宏替换只作替换,不做计算,不做表达式求解(在参数宏中宏定义只负责替换,只是符号代换,带参数时要加()如上(2+r)。)
- 函数调用在编译后程序运行时进行,并且分配内存。宏替换在编译前进行,不分配内存
- 函数只有一个返回值,利用宏则可以设法得到多个值