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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.