C预处理程序指令运算符##

时间:2017-03-28 19:23:38

标签: c c-preprocessor

我想在纯C中创建一个函数Felix,使用运算符void vec2_from_vec3(vec2 res, vec3 from),如下所示:

##

但是编译器没有让它。有可能吗?

https://github.com/datenwolf/linmath.h/blob/master/linmath.h启发

1 个答案:

答案 0 :(得分:1)

预处理器不会评估/计算n-1,它只会展开它。例如:3-1,因此字符串连接不起作用

(现代编译器做到了,但已经太晚了)

你总是可以做那些并不坏的事情:

#define MAGIC_MACROS(n1,n2) \
void vec##n1##_from_vec##n2##(vec##n1 res, vec##n2 from)

并用作:

MAGIC_MACROS(2,3);

请注意,您不应该使用;结束宏,因此它与函数调用是同构的,并且不会破坏编辑器自动缩进。