Page 1 sur 1

Le passage des paramètres !

Posté : mer. 27 janv. 2021 08:47
par Artemus24
Salut M. Vincent Leboulou.

Dans mon exercice suivant, je teste le passage des paramètres entre l'assembleur ARM au travers d'une fonction et d'une procédure, qui sont appelés en 'C' ou et en 'C++'.
J'ai donc fait le test du passage par valeur et du passage par adresse.

Ma question concerne le 'C++' et le passage par référence.
Hormis la syntaxe qui change pour le 'C' :

Code : Tout sélectionner

extern fadr(int*,int*,int*);
...
fadr(&x, &y, &z);
et la syntaxe pour le 'C++' :
extern "C" fadr(int&,int&,int&);
...
fadr(x, y, z);[/code]
Est-ce que le passage par référence en 'C++' est exactement la même chose que le passage par adresse en 'C' ?

Question subsidiaire : y-a-t-il d'autres passages de paramètres que par valeur ou par adresse ?

@+

Re: Le passage des paramètres !

Posté : mer. 27 janv. 2021 11:28
par destroyedlolo
Salut

La différence se situe au niveau de la "présentation" qu'en fait C++ ... et la sécurité que ca apporte, a savoir qu'évidement, une référence est forcément valide vu que le pointeur correspondant ne peut être NULL.

Mais au niveau du code généré, c'est kif kif et bouricot : dans les 2 cas, c'est un pointeur sur l'objet qui est passé.

A+

Re: Le passage des paramètres !

Posté : mer. 27 janv. 2021 12:09
par Artemus24
Salut Destroydlolo.
Destroyedlolo a écrit :dans les 2 cas, c'est un pointeur sur l'objet qui est passé.
Je recherchais cette confirmation que le passage par référence en 'C++' est bien un passage par adresse (ou par pointeur).
Je l'ai testé en faisant une fonction et une procédure en assembleur, que j'appelle en 'C' et en 'C++'.

Hormis le passage par valeur et par adresse, n'existe-t-il pas d'autre façon d'effectuer le passage des paramètres ?

Merci pour ta réponse.
@+

Re: Le passage des paramètres !

Posté : mer. 27 janv. 2021 14:50
par VincentLeboulou
Bonjour.
Ah ! je ne suis pas un spécialiste du C et du C++ . Par contre pour appeler des fonctions de librairies écrites en C depuis un programme assembleur il faut bien respecter la norme d'appel : à savoir passer les 4 premiers paramètres dans les registres r0 à r3 et s'il en existe d'autres il faut les passer par la pile (et dans l'ordre inverse en respectant l'alignement de la pile sur 8 octets). Vous trouverez des exemples sur mon blog dans le chapitre 10A ou lors de l'utilisation de la librairie X11.
Bon courage.

Re: Le passage des paramètres !

Posté : mer. 27 janv. 2021 14:54
par Artemus24
Salut M. Vincent Leboulou.

Non, c'est l'inverse. Je vais développer en assembleur des fonctions ou des procédures que je vais appeler en 'C' ou en 'C++'.
Je n'aurai pas besoin de plus de quatre paramètres car si j'ai besoin de plus, je vais utiliser une structure.
Je voulais savoir s'il existe autre chose que le passage des paramètres par valeur ou par adresse.

@+

Re: Le passage des paramètres !

Posté : mer. 27 janv. 2021 22:10
par destroyedlolo
Hum, hormis passer la valeur d'un argument ou son adresse, je ne vois pas ce qui pourrait exister d'autre ...
Donc, je dirais que non ;)

Re: Le passage des paramètres !

Posté : jeu. 28 janv. 2021 10:34
par Artemus24
Salut Destroyedlolo.

J'avais un doute, car j'ai posé la même question sous developpez et j'ai eu la même réponse.

Merci !
@+

Re: Le passage des paramètres !

Posté : jeu. 28 janv. 2021 11:54
par destroyedlolo
Oui, Developpez et Futura science sont mes références lorsque j'ai un problème ... meme si je n'ai malheureusement que peu (voir pas) de réponse car mes problèmes sont visiblement trop spécifiques ou trop bas niveau.
Par exemple pour faire une conversion de configuration par fichier fex vers un DTB :roll:
Pour pour ce qui est des questions de langages pures, se sont en effet de bonnes sources.