カンマ演算子の活用
カンマ演算子の悪用活用
#define FOREACH_LIST(list, kar, kdr, syntax) \ for (Object *l = list, *kdr = ((Cons*)l)->getCdr(), *kar = ((Cons*)l)->getCar(); \ ; kdr->isCons() ? (l = kdr, kdr = ((Cons*)l)->getCdr(), kar = ((Cons*)l)->getCar()):\ (RAISE_ERROR(list->lineno(), "syntax-error: malformed %s", syntax), kar = NULL))
こう使います。
FOREACH_LIST(cdr, kar, kdr, "and") { Object* o = Kernel::eval(kar, env); if (o->isFalse()) { return SCM_FALSE; } else if (kdr->isNil()) { return o; } }
もちろん良い子は真似してはいけません。