Cello库如何能够引入运算符和关键字的使用,即使它们不属于C库?

问题描述 投票:1回答:1

我最近遇到了一个名为Cello的C库。我看到了该库的一些示例,并注意到它引入了一些新的运算符和关键字。图书馆如何做到这一点?编译器如何知道这些东西?另外,我也该怎么做?

谢谢!

PS:大提琴图书馆网站的链接:Cello

c
1个回答
0
投票

预处理器宏。

例如,使用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;
© www.soinside.com 2019 - 2024. All rights reserved.