#include <stdio.h>
#include <stdarg.h>
typedef enum rule {
first, total
} Rule;
int fund(Rule rule, int v1, ...){
switch(rule){
case total:
{
int total = v1, value;
if(v1 == -1) return 0;
va_list ap;
while(value != -1){
total += value;
}
return total;
}
break;
case first:
return v1;
}
return -1;
}
int main(void){
printf("first:%d\n", fund
(first
, 1, 2, 3, 4, -1));//first:1 printf("total:%d\n", fund
(total
, 7, 5, 3, 1, -1));//total:16 }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRhcmcuaD4KCnR5cGVkZWYgZW51bSBydWxlIHsKCWZpcnN0LCB0b3RhbAp9IFJ1bGU7CgppbnQgZnVuZChSdWxlIHJ1bGUsIGludCB2MSwgLi4uKXsKCXN3aXRjaChydWxlKXsKCWNhc2UgdG90YWw6CgkJewoJCQlpbnQgdG90YWwgPSB2MSwgdmFsdWU7CgkJCWlmKHYxID09IC0xKSByZXR1cm4gMDsKCQkJdmFfbGlzdCBhcDsKCQkKCQkJdmFfc3RhcnQoYXAsIHYxKTsKCQkJdmFsdWUgPSB2YV9hcmcoYXAsIGludCk7CgkJCXdoaWxlKHZhbHVlICE9IC0xKXsKCQkJCXRvdGFsICs9IHZhbHVlOwoJCQkJdmFsdWUgPSB2YV9hcmcoYXAsIGludCk7CgkJCX0KCQkJdmFfZW5kKGFwKTsKCQkKCQkJcmV0dXJuIHRvdGFsOwoJCX0KCQlicmVhazsKCWNhc2UgZmlyc3Q6CgkJcmV0dXJuIHYxOwoJfQoJcmV0dXJuIC0xOwp9CgppbnQgbWFpbih2b2lkKXsKCXByaW50ZigiZmlyc3Q6JWRcbiIsIGZ1bmQoZmlyc3QsIDEsIDIsIDMsIDQsIC0xKSk7Ly9maXJzdDoxCglwcmludGYoInRvdGFsOiVkXG4iLCBmdW5kKHRvdGFsLCA3LCA1LCAzLCAxLCAtMSkpOy8vdG90YWw6MTYKfQ==