我最近遇到了一个名为Cello的C库。我看到了该库的一些示例,并注意到它引入了一些新的运算符和关键字。图书馆如何做到这一点?编译器如何知道这些东西?另外,我也该怎么做?
谢谢!
PS:大提琴图书馆网站的链接:Cello
例如,使用foreach
关键字。
#define foreach(...) foreach_xp(foreach_in, (__VA_ARGS__))
#define foreach_xp(X, A) X A
#define foreach_in(X, S) for(var \
__##X = (S), \
__Iter##X = instance(__##X, Iter), \
X = ((struct Iter*)(__Iter##X))->iter_init(__##X); \
X isnt Terminal; \
X = ((struct Iter*)(__Iter##X))->iter_next(__##X, X))
在编译时,宏扩展为普通的C代码。
var
甚至更简单。
typedef void* var;