<分区>
您认为哪个 C 宏最有用?我找到了以下一个,我用它在 C 中进行 vector 运算:
#define v3_op_v3(x, op, y, z) {z[0]=x[0] op y[0]; \
z[1]=x[1] op y[1]; \
z[2]=x[2] op y[2];}
它是这样工作的:
v3_op_v3(vectorA, +, vectorB, vectorC);
v3_op_v3(vectorE, *, vectorF, vectorJ);
...
#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));
...