宏
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 使用宏时是简单的代码段替换.
#define的概念
简单的宏定义
- #define <宏名> <字符串>
- 例: #define PI 3.1415926
复制代码 注:使用简单的宏定义可以定义一些常量,区分简单宏定义和const valtype 的区别(优先使用const)
带参数的宏定义(宏函数)
- #define <宏名> (<参数表>) (<宏体>)
- 例: #define Max(a, b) ( (a)>(b) ? (a) : (b))
复制代码 注:简单代码段使用宏函数比使用函数好,免去了函数调用的开销,提高运行效率
宏的使用情形
- 头文件包含
把源程序中的#include 扩展为文件正文,即把包含的.h文件找到并展开到#include 所在处
- 条件编译
预处理器根据#if和#ifdef等编译命令及其后的条件,将源程序中的某部分包含进来或排除在外,通常把排除在外的语句转换成空行
- #if 命令
- #if 整型常量表达式1
- 程序段1
- #elif 整型常量表达式2
- 程序段2
- #elif 整型常量表达式3
- 程序段3
- #else
- 程序段4
- #endif
复制代码 - #ifdef
- #ifdef 宏名
- 程序段1
- #else
- 程序段2
- #endif
复制代码
- 宏展开
预处理器将源程序文件中出现的对宏的引用展开成相应的宏定义,即本文所说的#define的功能,由预处理器来完成,这里是单纯的替换与展开
- 避免头文件重复引用
- #ifndef INCLUDE_NAME_H
- #define INCLUDE_NAME_H
- //头文件内容
- #endif
复制代码 define中的三个特殊符号:#,##,#@
- #define Conn(x,y) x##y
- #define ToChar(x) #@x
- #define ToString(x) #x
复制代码
- x##y表示x连接y, 如int n = Conn(123,456); // 结果就是n=123456;
- #@x表示给x加单引号, 如char a = ToChar(1); //结果就是a='1';
- #x表示给x加双引号, 如std::string str = ToString(12345); //结果就是std="12345";
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |