1 // 2 // The LLVM Compiler Infrastructure 3 // 4 // This file is distributed under the University of Illinois Open Source 5 // License. See LICENSE.TXT for details. 6 7 /* 8 * variadic.c 9 * testObjects 10 * 11 * Created by Blaine Garst on 2/17/09. 12 * 13 */ 14 15 // PURPOSE Test that variadic arguments compile and work for Blocks 16 // CONFIG 17 18 #include <stdarg.h> 19 #include <stdio.h> 20 21 int main(int argc, char *argv[]) { 22 23 long (^addthem)(const char *, ...) = ^long (const char *format, ...){ 24 va_list argp; 25 const char *p; 26 int i; 27 char c; 28 double d; 29 long result = 0; 30 va_start(argp, format); 31 //printf("starting...\n"); 32 for (p = format; *p; p++) switch (*p) { 33 case 'i': 34 i = va_arg(argp, int); 35 //printf("i: %d\n", i); 36 result += i; 37 break; 38 case 'd': 39 d = va_arg(argp, double); 40 //printf("d: %g\n", d); 41 result += (int)d; 42 break; 43 case 'c': 44 c = va_arg(argp, int); 45 //printf("c: '%c'\n", c); 46 result += c; 47 break; 48 } 49 //printf("...done\n\n"); 50 return result; 51 }; 52 long testresult = addthem("ii", 10, 20); 53 if (testresult != 30) { 54 printf("got wrong result: %ld\n", testresult); 55 return 1; 56 } 57 testresult = addthem("idc", 30, 40.0, 'a'); 58 if (testresult != (70+'a')) { 59 printf("got different wrong result: %ld\n", testresult); 60 return 1; 61 } 62 printf("%s: Success\n", argv[0]); 63 return 0; 64 } 65 66 67