From a5d0550f6f9cd65ece292983c830c0267bbf109b Mon Sep 17 00:00:00 2001 From: Mateusz Cieciura Date: Mon, 18 Nov 2013 19:03:51 +0100 Subject: [PATCH 1/4] Added readme --- README | 1 + 1 file changed, 1 insertion(+) create mode 100644 README diff --git a/README b/README new file mode 100644 index 0000000..c78d342 --- /dev/null +++ b/README @@ -0,0 +1 @@ +Readme =^.^= From bfbd1924a39954dbe3d3c7800e626953ceb62fad Mon Sep 17 00:00:00 2001 From: Mateusz Cieciura Date: Mon, 18 Nov 2013 19:56:00 +0100 Subject: [PATCH 2/4] Various number of arg - almost done --- zadanie.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 zadanie.c diff --git a/zadanie.c b/zadanie.c new file mode 100644 index 0000000..79e22ac --- /dev/null +++ b/zadanie.c @@ -0,0 +1,19 @@ +#include +#include + +void *alloc(const char *fmt, ...); + +struct test { + int i1, i2; + double d; + char i3; +}; + +int +main() { + struct test *p = alloc("iidi", 33, 44, 3.14, 55); + + printf("%d %d %f %d\n", p->i1, p->i2, p->d, p->i3); + + return 0; +} From 0fa097244d3f55521027b08146dba4060ed3c7d0 Mon Sep 17 00:00:00 2001 From: Mateusz Cieciura Date: Mon, 18 Nov 2013 20:19:01 +0100 Subject: [PATCH 3/4] Almooooooooooooooooost there --- zadanie.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/zadanie.c b/zadanie.c index 79e22ac..d90db4c 100644 --- a/zadanie.c +++ b/zadanie.c @@ -17,3 +17,7 @@ main() { return 0; } + +void *alloc(const char *fmt, ...) + +} From a4b998a546bfaa6ea0283821b32c5dedeca49143 Mon Sep 17 00:00:00 2001 From: Mateusz Cieciura Date: Mon, 18 Nov 2013 21:02:28 +0000 Subject: [PATCH 4/4] Variadic function - solution --- variadic_function.c | 58 +++++++++++++++++++++++++++++++++++++++++++++ zadanie.c | 23 ------------------ 2 files changed, 58 insertions(+), 23 deletions(-) create mode 100644 variadic_function.c delete mode 100644 zadanie.c diff --git a/variadic_function.c b/variadic_function.c new file mode 100644 index 0000000..62d1dc2 --- /dev/null +++ b/variadic_function.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +void *alloc(const char *fmt, ...); + +struct test { + int i1, i2; + double d; + char i3; +}; + +int main() { + struct test *p = alloc("iidi", 33, 44, 3.14, 55); + + printf("%d %d %f %d\n", p->i1, p->i2, p->d, p->i3); + + return 0; +} + +void *alloc(const char *fmt, ...) { + struct test *t; + va_list ap; + int i1_contains_value, i2_contains_value; + + t = malloc(sizeof(*t)); + va_start(ap, fmt); + + i1_contains_value = 0; + i2_contains_value = 0; + + while (*fmt) { + + if (*fmt == 'i') { + + if (i1_contains_value == 0) { + t->i1 = va_arg(ap, int); + i1_contains_value = 1; + } else if (i2_contains_value == 0) { + t->i2 = va_arg(ap, int); + i2_contains_value = 1; + } else { + t->i3 = va_arg(ap, int); + } + + } else if (*fmt == 'd') { + t->d = va_arg(ap, double); + } else if (*fmt == 'c') { + t->i3 = va_arg(ap, int); + } + fmt++; + } + + va_end(ap); + + return t; +} diff --git a/zadanie.c b/zadanie.c deleted file mode 100644 index d90db4c..0000000 --- a/zadanie.c +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include - -void *alloc(const char *fmt, ...); - -struct test { - int i1, i2; - double d; - char i3; -}; - -int -main() { - struct test *p = alloc("iidi", 33, 44, 3.14, 55); - - printf("%d %d %f %d\n", p->i1, p->i2, p->d, p->i3); - - return 0; -} - -void *alloc(const char *fmt, ...) - -}