parameters-lib.c revision a81af7c2f7691c1eeb801b7756b13899b79d7568
1#include <string.h> 2#include <stdio.h> 3 4void func_ignore(int a, int b, int c) 5{ 6 printf("%d\n", a + b + c); 7} 8 9void func_intptr(int *i) 10{ 11 printf("%d\n", *i); 12} 13 14void func_intptr_ret(int *i) 15{ 16 *i = 42; 17} 18 19int func_strlen(char* p) 20{ 21 strcpy(p, "Hello world"); 22 return strlen(p); 23} 24 25void func_strfixed(char* p) 26{ 27 strcpy(p, "Hello world"); 28} 29 30void func_string(char* p) 31{ 32 printf("%s\n", p); 33} 34 35void func_ppp(int*** ppp) 36{ 37 printf("%d\n", ***ppp); 38} 39 40void func_stringp(char** sP) 41{ 42 printf("%s\n", *sP); 43} 44 45void func_enum(int x) 46{ 47 printf("enum: %d\n", x); 48} 49 50void func_short(short x1, short x2) 51{ 52 printf("short: %hd %hd\n", x1, x2); 53} 54 55void func_ushort(unsigned short x1, unsigned short x2) 56{ 57 printf("ushort: %hu %hu\n", x1, x2); 58} 59 60float func_float(float f1, float f2) 61{ 62 printf("%f %f\n", f1, f2); 63 return f1; 64} 65 66double func_double(double f1, double f2) 67{ 68 printf("%f %f\n", f1, f2); 69 return f2; 70} 71 72void func_typedef(int x) 73{ 74 printf("typedef'd enum: %d\n", x); 75} 76 77void func_arrayi(int* a, int N) 78{ 79 int i; 80 printf("array[int]: "); 81 for (i = 0; i < N; i++) 82 printf("%d ", a[i]); 83 printf("\n"); 84} 85 86void func_arrayf(float* a, int N) 87{ 88 int i; 89 printf("array[float]: "); 90 for (i = 0; i < N; i++) 91 printf("%f ", a[i]); 92 printf("\n"); 93} 94 95struct test_struct { 96 int simple; 97 int alen; 98 int slen; 99 struct { int a; int b; }* array; 100 struct { int a; int b; } seq[3]; 101 char* str; 102 char* outer_str; 103}; 104 105void func_struct(struct test_struct* x) 106{ 107 char buf[100]; 108 int i; 109 110 printf("struct: "); 111 112 printf("%d, [", x->simple); 113 for (i = 0; i < x->alen; i++) { 114 printf("%d/%d", x->array[i].a, x->array[i].b); 115 if (i < x->alen - 1) 116 printf(" "); 117 } 118 printf("] ["); 119 for (i = 0; i < 3; i++) { 120 printf("%d/%d", x->seq[i].a, x->seq[i].b); 121 if (i < 2) 122 printf(" "); 123 } 124 printf("] "); 125 126 strncpy(buf, x->str, x->slen); 127 buf[x->slen] = '\0'; 128 printf("%s\n", buf); 129} 130 131void func_work (char *x) 132{ 133 *x = 'x'; 134} 135 136void func_call (char *x, char* y, void (*cb) (char *)) 137{ 138 cb (y); 139 *x = (*y)++; 140} 141 142struct S2 { 143 float f; 144 char a; 145 char b; 146}; 147 148struct S3 { 149 char a[6]; 150 float f; 151}; 152 153struct S2 154func_struct_2(int i, struct S3 s3, double d) 155{ 156 return (struct S2){ s3.f, s3.a[1], s3.a[2] }; 157} 158 159struct S4 { 160 long a; 161 long b; 162 long c; 163 long d; 164}; 165 166struct S4 167func_struct_large(struct S4 a, struct S4 b) 168{ 169 return (struct S4){ a.a + b.a, a.b + b.b, a.c + b.c, a.d + b.d }; 170} 171 172struct S5 { 173 char a; 174 char b; 175 long c; 176 long d; 177}; 178 179struct S5 180func_struct_large2(struct S5 a, struct S5 b) 181{ 182 return (struct S5){ a.a + b.a, a.b + b.b, a.c + b.c, a.d + b.d }; 183} 184 185struct S6 { 186 long a; 187 long b; 188 char c; 189 char d; 190}; 191 192struct S6 193func_struct_large3(struct S6 a, struct S6 b) 194{ 195 return (struct S6){ a.a + b.a, a.b + b.b, a.c + b.c, a.d + b.d }; 196} 197 198void 199func_many_args(int a, int b, long c, double d, char e, int f, float g, char h, 200 int i, double j, int k, double l, char m, int n, short o, int p, 201 char q, float r, float s, double t, long u, float v, float w, 202 float x, float y) 203{ 204} 205 206void 207func_lens(int a, long b, short c, long d) 208{ 209} 210 211int 212func_bool(int a, int b) 213{ 214 return !b; 215} 216 217void 218func_hide(int a, int b, int c, int d, int e, int f) 219{ 220} 221 222long * 223func_short_enums(short values[]) 224{ 225 static long retvals[4]; 226 retvals[0] = values[0]; 227 retvals[1] = values[1]; 228 retvals[2] = values[2]; 229 retvals[3] = values[3]; 230 return retvals; 231} 232 233long 234func_negative_enum(short a, unsigned short b, int c, unsigned d, 235 long e, unsigned long f) 236{ 237 return -1; 238} 239 240void 241func_charp_string(char *p) 242{ 243} 244 245struct dbl_eqv1 { double d; }; 246struct dbl_eqv2 { struct dbl_eqv1 d; }; 247struct dbl_eqv3 { struct dbl_eqv2 d; }; 248struct dbl_eqv4 { struct dbl_eqv3 d; }; 249 250struct flt_eqv1 { float d; }; 251struct flt_eqv2 { struct flt_eqv1 d; }; 252struct flt_eqv3 { struct flt_eqv2 d; }; 253struct flt_eqv4 { struct flt_eqv3 d; }; 254 255struct dbl_eqv1 256func_dbl_eqv(struct dbl_eqv1 a, struct dbl_eqv2 b, 257 struct dbl_eqv3 c, struct dbl_eqv4 d) 258{ 259 return (struct dbl_eqv1){ a.d + b.d.d + c.d.d.d + d.d.d.d.d }; 260} 261 262struct flt_eqv1 263func_flt_eqv(struct flt_eqv1 a, struct flt_eqv2 b, 264 struct flt_eqv3 c, struct flt_eqv4 d) 265{ 266 return (struct flt_eqv1){ a.d + b.d.d + c.d.d.d + d.d.d.d.d }; 267} 268 269struct struct_empty {}; 270struct struct_size1 { char a; }; 271struct struct_size2 { short a; }; 272struct struct_size4 { int a; }; 273struct struct_size8 { int a; int b; }; 274 275struct struct_empty 276func_struct_empty(struct struct_empty e) 277{ 278 return e; 279} 280 281struct struct_size1 282func_struct_size1(struct struct_size1 e) 283{ 284 return e; 285} 286 287struct struct_size2 288func_struct_size2(struct struct_size2 e) 289{ 290 return e; 291} 292 293struct struct_size4 294func_struct_size4(struct struct_size4 e) 295{ 296 return e; 297} 298 299struct struct_size8 300func_struct_size8(struct struct_size8 e) 301{ 302 return e; 303} 304