Forum: Compiler & IDEs Problem dem übergeben von optimalen parametern - stdarg.h


von Felix H. (masterq)


Lesenswert?

Hallo Leute,
ich habe ein Problem mit einem meiner Programme, und zwar möchte ich 
gerne optimale Parameter übergeben, und das klappt auch fast, aber der 
erste Parameter ist irgendwie immer 0... Hier mal eben mein code:
1
#include <main.h>
2
#include <avr/io.h>
3
#include <conf/controller.h>
4
#if uart == 1
5
#include <includes/uart.c>
6
#endif
7
#include <stdarg.h>
8
9
10
int printargs(int n, ...)
11
{
12
    va_list ap;
13
    int i = 0;
14
 
15
    va_start(ap, n);
16
    for (; n; n--)
17
        i += va_arg(ap, int);
18
    va_end(ap);
19
    uart_send_char('\n');
20
    uart_send_char('\r');
21
    return i;
22
}
23
24
 
25
int main(void)
26
{
27
  uart_init();
28
   uart_send_var((char) printargs(5, 2, 14, 15, 24, 48, 0));
29
   uart_send_var((char) printargs(2, 3, 4));
30
   uart_send_var((char) printargs(0));
31
   uart_send_var((char)printargs(1, 0));
32
   return 0;
33
}


Meiner Meinung nach müsste die Ausgabe so aussehen:
1
108
2
9
3
0
4
1


Sie sieht aber so aus:
1
103
2
7
3
0
4
0

Vielen dank an alle die mir helfen wollen.

Grüße
Felix

von Karl H. (kbuchegg)


Lesenswert?

Felix H. schrieb:

> Meiner Meinung nach müsste die Ausgabe so aussehen:
>
>
1
> 108
2
> 9
3
> 0
4
> 1
5
>
>


Wie kommst du da drauf?

printargs(5, 2, 14, 15, 24, 48, 0)
          |
    +-----+
    v
    n wird 5, 5 Zahlen
    2 + 14 + 15 + 24 + 48  -> 103

printargs(2, 3, 4)
          |
    +-----+
    v
    n wird 2, 2 Zahlen
    3 + 4   ->  7

printargs(0)
          |
    +-----+
    v
    n wird 0, 0 Zahlen
    ->    0

printargs(1, 0)
          |
    +-----+
    v
    n wird 1, 1 Zahl
    0   ->  0

von (prx) A. K. (prx)


Lesenswert?

Felix H. schrieb:

> Meiner Meinung nach müsste die Ausgabe so aussehen:

Hast du mal gekellnert? Es heisst ja, dass die gerne das Datum mit auf 
die Rechnung addieren ;-).

von Felix H. (masterq)


Lesenswert?

Haha, nein nie, aber ja, irgendwie dumm :-)
Naja, vielen dank jedenfalls! (besonders an Karl heinz, die Erklärung 
sieht nach ziemlich viel mühe aus!) Ich habe keine Ahnung wie ich den 
ersten Parameter vergessen konnte...

Grüße

Felix

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.