Not logged in. · Lost password · Register

Forum 2. Semester Grundlagen der systemnahen Programmierung in C RSS
Art der Übergabe, Funktionsübergabe, Stack
Nudelsuppe
Member since Jan 2015
2 posts
Subject: Fragen zum Stoff
Bei mir sind beim durchgehen vom Skript ein paar Fragen aufgekommen:


1.
Im Skript steht, dass Pointer (13-5) und Arrays (13-16) an Funktionen als call-by-reference übergeben werden. (oder hat dieser geschlängelte Pfeil nur eine "sieht so aus wie"/"ist in etwa" Bedeutung??)
C unterstützt doch aber gar kein call-by-reference, sondern übergibt ausnahmslos immer per call-by-value. Durch Verwendung von Pointern und Übergabe von Adressen mag das zwar wie call-by-reference aussehen, ist aber doch gar keine. Habe ich hier falsche Informationen, oder ist das im Skript falsch? Was sollte ich bei entsprechenden MC Fragen ankreuzen?

2.
Im Skript auf Seite(n) 16-5 wird im Stack ganz oben "return-addr" und "fp-retten" gezeigt. Was darf ich mir den hierunter vorstellen? Es sieht für mich so aus, als würde hier versucht werden, irgendwo hinzuspringen, falls die main() doch mal terminieren sollte. Und welcher framepointer soll denn hier gerettet werden?

3.
Zuletzt noch eine konkrete Code Frage. Im untenstehenden Programm möchte ich ohne speziellen Sinn, sondern einfach um es einmal gemacht zu haben, einer Funktion eine andere Funktion übergeben. Die übergebene Funktion soll aber nicht wie im Beispiel im Skript eine void/void-Funktion sein, sondern einen Rück- und Übergabewert haben. Lässt sich das auch noch eleganter lösen? Also ohne dass ich funcA() zwei Parameter übergeben muss?


#include <avr/interrupt.h>
#include <7seg.h>

void funcA(uint8_t (*j)(uint8_t ), uint8_t arg_von_j){
    sb_7seg_showNumber(j(arg_von_j));   
}

uint8_t funcB(uint8_t a){
    sb_7seg_showNumber(a);
    return (a<<1);   
}

void main(void){
sei();
funcA( funcB , 29);

while(1){}

}


Danke schonmal im vorraus :)
Raim
GSPiC-Guru
Member since May 2011
79 posts
Quote by Nudelsuppe on 2015-07-17, 18:23:
1.
Im Skript steht, dass Pointer (13-5) und Arrays (13-16) an Funktionen als call-by-reference übergeben werden. (oder hat dieser geschlängelte Pfeil nur eine "sieht so aus wie"/"ist in etwa" Bedeutung??)
C unterstützt doch aber gar kein call-by-reference, sondern übergibt ausnahmslos immer per call-by-value. Durch Verwendung von Pointern und Übergabe von Adressen mag das zwar wie call-by-reference aussehen, ist aber doch gar keine. Habe ich hier falsche Informationen, oder ist das im Skript falsch? Was sollte ich bei entsprechenden MC Fragen ankreuzen?

Alles richtig so weit. C benutzt call-by-value, aber mit Zeigern lässt sich call-by-reference nachbilden.

Quote by Nudelsuppe on 2015-07-17, 18:23:
2.
Im Skript auf Seite(n) 16-5 wird im Stack ganz oben "return-addr" und "fp-retten" gezeigt. Was darf ich mir den hierunter vorstellen? Es sieht für mich so aus, als würde hier versucht werden, irgendwo hinzuspringen, falls die main() doch mal terminieren sollte. Und welcher framepointer soll denn hier gerettet werden?

Wenn ein Betriebssystem verwendet wird (wie im Beispiel auf IA-32 üblich), terminiert die main-Funktion tatsächlich ganz normal und gibt auch einen Wert zurück. Die Rückkehr erfolgt dann in eine C-Bibliotheksfunktion, die automatisch dazu gebunden wird.

Quote by Nudelsuppe on 2015-07-17, 18:23:
3.
Zuletzt noch eine konkrete Code Frage. Im untenstehenden Programm möchte ich ohne speziellen Sinn, sondern einfach um es einmal gemacht zu haben, einer Funktion eine andere Funktion übergeben. Die übergebene Funktion soll aber nicht wie im Beispiel im Skript eine void/void-Funktion sein, sondern einen Rück- und Übergabewert haben. Lässt sich das auch noch eleganter lösen? Also ohne dass ich funcA() zwei Parameter übergeben muss?

Nein, Funktionszeiger und Parameter müssen dann separat übergeben werden.
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O :troll:
Special characters:
Go to forum
Powered by the Unclassified NewsBoard software, 20110527-dev, © 2003-8 by Yves Goergen