#define IMPLIES(x, y) (!(x) || (y))
#define COMPARE(x, y) (((x) > (y)) - ((x) < (y)))
#define SIGN(x) COMPARE(x, 0)
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*a))
#define SWAP(x, y, T) do { T tmp = (x); (x) = (y); (y) = tmp; } while(0)
#define SORT2(a, b, T) do { if ((a) > (b)) SWAP((a), (b), T); } while (0)
#define SET(d, n, v) do{ size_t i_, n_; for (n_ = (n), i_ = 0; n_ > 0; --n_, ++i_) (d)[i_] = (v); } while(0)
#define ZERO(d, n) SET(d, n, 0)
当然,还有各种 MIN、MAX、ABS 等。
请注意,顺便说一句,上述内容都不能通过 C 中的函数实现。
附:我可能会挑出以上内容IMPLIES
宏是最有用的宏之一。它的主要目的是促进编写更优雅和可读的断言,如
void foo(int array[], int n) {
assert(IMPLIES(n > 0, array != NULL));
...