Zwei Werte aus Unterprogramm übergeben

Gast #3608835
Lesenswert?

Hallo
ich hätte ein Frage im Bezug auf Unterprogramme, ich will aus meinem 
Unterprogramm 2 Werte in das Hauptprogramm übergeben, weiß aber nicht 
wie man das richtig in C-Code schreibt (die Stelle, die Falsch ist, ist 
mit Fragezeichen makiert). Wie man eine Variable vom Unterprgramm 
übergibt ist das kein Problem. Im Hauptprogramm teste ich dann mit LED's 
ob die Variablen den richtigen Wert haben, diese leuchten allerdings 
nicht.

Ich verwende den dsPIC33FJ256MC710A, das dsPICDEM MCLV, einen CCS
Compiler
1
#include <33FJ256MC710A.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
#fuses XT,PR_PLL, NOWDT
5
#use delay (crystal=8M,clock=80M)
6

7
signed long eins(signed long b, signed long c)
8
{
9
   signed long x=1,y=3;
10
   b=x*y;
11
   c=x+y;
12
   return(b,c);
13
}
14

15
void main()
16
{
17
  set_tris_e(0);
18
    while(1)
19
    {
20
    signed long b,c,u,i;
21

22
 ????   i,u=zwei(b,c);    ????
23

24
    if(i==3)
25
    {output_high(PIN_E0);}
26
    else
27
    output_low(PIN_E0);
28

29
    if(u==4)
30
    {output_high(PIN_E1);}
31
    else
32
    output_low(PIN_E1);
33
    }
34
}
ich hoffe jemand kann mir helfen
mfg
#3608843
Lesenswert?

>    return(b,c);

Wann immer du in nächster Zeit versucht bist, ein Komma ',' zu benutzen: 
lass es. Der Komma-Operator macht etwas völlig anderes, als du denkst.

Für manche Sachen ist er ganz nett, aber im Grunde wirft er eine Menge 
Probleme auf, die man ohne ihn nicht hätte. Man hätte ihn auch weglassen 
können, ohne dass es sich gravierend ausgewirkt hätte.
#3608894
Lesenswert?

Versuch es mal so. Mit der zweiten Möglichkeit musst du einfach 
aufpassen, damit du keine Variablennamen zweimal benützt. Dafür musst du 
dich nicht mit dem Übergeben von Daten beschäftigen.
1
#include <33FJ256MC710A.h>
2
#include <stdio.h>
3
#include <stdlib.h>
4
#fuses XT,PR_PLL, NOWDT
5
#use delay (crystal=8M,clock=80M)
6

7
int eins(int b, int c)
8
{
9
   int x=1,y=3;
10
   b=x*y;
11
   c=x+y;
12
   return(b,c);
13
}
14

15
void main()
16
{
17
  set_tris_e(0);
18
    while(1)
19
    {
20
    int b,c,u,i;
21

22
    i=eins(b); 
23
    u=eins(c);
24
    if(i==3)
25
    {output_high(PIN_E0);}
26
    else
27
    output_low(PIN_E0);
28

29
    if(u==4)
30
    {output_high(PIN_E1);}
31
    else
32
    output_low(PIN_E1);
33
    }
34
}
35

36
// Andere Möglichkeit mit globalen Variablen
37
int x=1,y=3;
38
int b,c,u,i;
39

40
int eins(void)
41
{
42
   b=x*y;
43
   c=x+y;
44
}
45

46
void main()
47
{
48
  set_tris_e(0);
49
    while(1)
50
    {
51
  eins();
52
    if(i==3)
53
    {output_high(PIN_E0);}
54
    else
55
    output_low(PIN_E0);
56

57
    if(u==4)
58
    {output_high(PIN_E1);}
59
    else
60
    output_low(PIN_E1);
61
    }
62
}


Warum benutzt du eigentlich long ??
Mit char oder int würdest du weniger Speicher benötigen.
#3608903
Lesenswert?

P_ Richner schrieb:
> Versuch es mal so.

> int eins(int b, int c)
> {
> ...
>     i=eins(b);
>     u=eins(c);


Das wird so aber nichts.

> Mit der zweiten Möglichkeit musst du einfach
> aufpassen, damit du keine Variablennamen zweimal benützt. Dafür musst du
> dich nicht mit dem Übergeben von Daten beschäftigen.

Ah, die gute alte 'Ich brauch das nicht lernen'Ä Methode.
Kann man machen. Klar.
Aber irgendwann wird es nicht ausbleiben sich auch mal mit dem 
Schreckgespenst aller angehenden C-Programmierer 'Pointer' zu 
beschäftigen.
Auf dieser Ebene ist das alles noch recht einfach. Das zu lernen, darum 
kommt er auf Dauer nicht herum. Warum also nicht jetzt, wo die Dinge 
noch einfach sind.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren