宏 —— C/C++ 黑魔法

来源:互联网 发布:linux 重命名命令 编辑:程序博客网 时间:2024/05/16 08:53
  • 宏的应用场景主要在:多次出现的代码逻辑

  • 一个数的平方:#define SQUARE(a) ((a)*(a))

  • #define 宏做的是原样替换,不做安全检查,哪怕宏中涉及的某变量暂时未被声明,宏只在调用端执行安全检查;

1. 常量的宏定义

常量的宏定义,和枚举一样,最直接的目的在于通过重命名为变量赋予实际意义,提高代码的可读性。

#define PI      3.141592653589793#define VK_ESCAPE   0x1B

显然 PI 要比 3.141592653589793 更为直接,VK_ESCAPE 要比一个 0x1B(或者27)更有意义。

当然关于 VK_ESCAPE 更为审慎的写法是:

#if !defined VK_ESCAPE#define VK_ESCAPE 0x1B#endif

2. 编写简洁的代码

将函数中反复出现的一部分代码定义为 C/C++ 宏;

如,判断无序整数数组中有无重复元素:

bool hasDuplicate(const vector<int>& array){    for (int i = 0; i < array.size(); ++i)        for (int j = 0; j < i; ++j)            if (array[i] == array[j])                return true;    return false;}

利用宏定义可将代码改写为:

#define FOR(i, n) for (int i = 0; i < n; ++i)bool hasDuplicate(const vector<int>& array){    FOR (i, vec.size())        FOR (j, i)            if (array[i] == array[j])                return true;    return false;}
0 0
原创粉丝点击