ベクトル計算がいっぱいのコードで次のプリプロセッサトリックを使用するのは良い習慣でしょうか?一方では、一般的な識別子(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);
}