| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| |
| /* |
| * variadic.c |
| * testObjects |
| * |
| * Created by Blaine Garst on 2/17/09. |
| * |
| */ |
| |
| // PURPOSE Test that variadic arguments compile and work for Blocks |
| // CONFIG |
| |
| #include <stdarg.h> |
| #include <stdio.h> |
| |
| int main(int argc, char *argv[]) { |
| |
| long (^addthem)(const char *, ...) = ^long (const char *format, ...){ |
| va_list argp; |
| const char *p; |
| int i; |
| char c; |
| double d; |
| long result = 0; |
| va_start(argp, format); |
| //printf("starting...\n"); |
| for (p = format; *p; p++) switch (*p) { |
| case 'i': |
| i = va_arg(argp, int); |
| //printf("i: %d\n", i); |
| result += i; |
| break; |
| case 'd': |
| d = va_arg(argp, double); |
| //printf("d: %g\n", d); |
| result += (int)d; |
| break; |
| case 'c': |
| c = va_arg(argp, int); |
| //printf("c: '%c'\n", c); |
| result += c; |
| break; |
| } |
| //printf("...done\n\n"); |
| return result; |
| }; |
| long testresult = addthem("ii", 10, 20); |
| if (testresult != 30) { |
| printf("got wrong result: %ld\n", testresult); |
| return 1; |
| } |
| testresult = addthem("idc", 30, 40.0, 'a'); |
| if (testresult != (70+'a')) { |
| printf("got different wrong result: %ld\n", testresult); |
| return 1; |
| } |
| printf("%s: Success\n", argv[0]); |
| return 0; |
| } |
| |
| |