在充满矢量计算的代码中使用以下预处理器技巧是一个好习惯吗?一方面,它使用通用标识符(mul,add,...)污染了命名空间,闻起来像一个肮脏的黑客,但另一方面,它可能使复杂的表达式更具可读性。还有其他优点/缺点吗?
typedef struct { double x,y; } vector;
vector vector_add(vector v0, vector v1);
double vector_mul(vector v0, vector v1);
...
#define _(a) opf(a)
#define mul ,mul,
#define add ,add,
...
#define opf(a,o,b) vector_##o((a),(b))
void example(void)
{
vector a, b, c;
double d;
d = _( _(a add b) mul c);
// equivalent without the macros:
d = vector_mul(vector_add(a,b),c);
}