Hy Leute. Häng total fest. Vermute eine einfache Lösung. Ich habe ein Programm für meinen ATmega644 geschrieben wo in einer main.c eine Variable berechnet wird. Dieses Ergebniss bzw. genau diese Variable mit dem berecneten Wert müsste ich an eine httpd.c übergeben und dort weiter verarbeiten. Da hab ich jetzt das Problem. Ich bekomm einfach nicht die Werte aus der einen C-Datei in die andere. Bitte helft. gruß
die vernünftigste Lösung besteht darin, dass du den Wert an die aufgerufene Funktion einfach als Argument übergibst
1 | /* Funktionsprototyp, damit in main auch bekannt ist, welche
|
2 | Signatur, die aufgerufene Funktion foo besitzt
|
3 | */
|
4 | void foo( int arg ); |
5 | |
6 | |
7 | int main() |
8 | {
|
9 | int i = 2 * 20; |
10 | |
11 | foo( i ); |
12 | }
|
in http.c:
1 | void foo( int arg ) |
2 | {
|
3 | /* mach was mit dem übergebenen Wert in arg */
|
4 | }
|
Die andere Lösung wäre der Einsatz einer globalen Variablen. Kann insbesondere auf einem µC sinnvoll sein, sollte jedoch immer mit Vorsicht benutzt werden. Globale Variablen gehören mit zu den 'Wurzeln allen Übels'
Danke für deine Antwort. Hab da gleich mehrere Fragen. 1. Wiso deklarierst du denn Prototyyp als void? 2. Beim Aufruf der Funktion wird i dann der Rückgabewert? In der Funktion steht ja garnix drin? foo( i ); 3. In der httpd.c muss ich dann mit arg arbeiten oder? Weil i vorher übergeben wurde? Vielen Dank.
uzti wrote: > Danke für deine Antwort. > Hab da gleich mehrere Fragen. > 1. Wiso deklarierst du denn Prototyyp als void? Weil die Funktion, so wie sie jetzt ist, keinen Rückgabewert hat, also eine void Funktion ist. Und Prototyp und tatsächliche Funktion müssen übereinstimmen. > 2. Beim Aufruf der Funktion wird i dann der Rückgabewert? Nein. Der momentane Wert von i wird in die Funktion hinein übergeben und wird zum Inhalt der Variablen arg innerhalb der Funktion. > In der > Funktion steht ja garnix drin? > foo( i ); Das ist ja auch der Aufruf der Funktion. > 3. In der httpd.c muss ich dann mit arg arbeiten oder? Weil i vorher > übergeben wurde? Der Wert wird aus i entnommen und an die Funktion übergeben. Übergeben wird er, in dem innerhalb der Funktion eine neue Variable 'arg' erzeugt wird, die diesen Wert beim Funktionsaufruf zugewiesen bekommt. 'arg' existiert nur, solange die Funktion läuft. Sobald die Funktion fertig ist und der Rücksprung zum Aufrufer erfolgt, verschwindet 'arg' wieder. i und arg haben absolut nichts miteinander zu tun, ausser das beim Aufruf der Funktion der momentane Wert von i genommen wird und als Initialwert von arg benutzt wird. Das ist auch gut so, denn damit wird die Funktion unabhängig von den Variablen des Aufrufers. Stell dir einfach mal vor, du brauchst eine Funktion, die immer das doppelte eines Wertes liefert.
1 | int twice( int Wert ) |
2 | {
|
3 | return 2 * Wert; |
4 | }
|
Da 'twice' nichts über die Variablen des Aufrufers wissen muss, kannst du die Funktion jetzt mit allem Möglichen aufrufen, solange es nur ein int ist.
1 | int twice( int Wert ); /* Prototyp */ |
2 | |
3 | int main() |
4 | {
|
5 | int i, j; |
6 | |
7 | i = 5; |
8 | |
9 | j = twice( i ); // j wird 10, weil i den Wert 5 enthält |
10 | j = twice( 5 ); // j wird ebenfalls 10, weil das doppelte von 5 -> 10 |
11 | j = twice( 3 * i ); // 3 * i ergibt 15, das doppelte von 15 -> 30 |
12 | j = twice( 3 * ( i + 2 ) ); // 5 + 2 -> 7, 3 * 7 -> 21, das doppelte davon -> 42 |
13 | ...
|
14 | }
|
(Hier wurde der Returntyp der Funktion auf int gesetzt, eben weil die Funktion einen int returniert)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.