OVH Cloud OVH Cloud

passer un tableau à une fonction

99 réponses
Avatar
Carmin
Bonjour,

j'apprends C++, et je suis confronté à ce pb : passer un tableau à une
fonction, voilà un code sans utilité mais qui permet de mettre mon pb en
avant : je reçois le message d'erreur suivant: Unresolved external
'ChangerVal(int)' referenced from module prog1.cpp
#include <iostream.h>
#include <conio.h>

void ChangerVal(int);

main()
{
int tab[2];
tab[0]=tab[1]=0;

ChangerVal(tab[2]);
for (int i=0; i<=1; i++)
{cout << tab[i]<<endl;}
getch();
}

void ChangerVal(int tab[2])
{
tab[0]=5;
tab[1]=10;
}
merci de votre aide

10 réponses

6 7 8 9 10
Avatar
Gabriel Dos Reis
writes:

[...]

| > > ET cela manque a bien des programmeurs.
|
| > Je suis d'accord qu'il est bien de savoir, par exemple, comment une
| > machine représente les entiers en binaire, mais pour bien de domaines
| > d'application, ce savoir ne me semble pas indispensable. Il s'agit de
| > savoir se placer sur le niveau d'abstraction approprié, qui n'est pas
| > le même si on écrit un driver pour un composant réseau (gestion des
| > registres, de la DMA, des interruptions ...) que dans le cas d'une
| > application qui traite des ordres d'achat / vente à la bourse...
|
| En effet. Si on fait le calcul numérique (ce que font intensemment les
| programmes du marché),

hmm, il n'y a pas si longtemps que ça, tu disais sur ce grooupe que le
calcul numérique représente une minorité. Cela a-t-il changé ?

-- Gaby
Avatar
Marc Boyer
M.B. wrote:
"Jean-Marc Bourguet" a écrit dans le message news:

"M.B." writes:
A penser a trop bas niveau, on fini par croire que faire des
soustractions pour mettre en minuscule ou mettre un decalage quand on
veut faire une multiplication est savoir bien programmer.


Oui mettre un decalage pour multiplier par une puissance de 2, c'est
savoir programmer avec la connaissance de la machine qu'on programme.
ET cela manque a bien des programmeurs.


Tu connais toutes les machines sur lesquelles ton code
vas pouvoir s'exécuter ?
Moi, si j'ai besoin d'une multiplication par 2, je multiplie
par deux, en laissant au compilateur (qui connait le processeur)
le choix de l'instruction à utiliser. A lui de voir ensuite
ce qu'il en fait.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Christophe Lephay
"Samuel Krempp" a écrit dans le
message de news:3f7bef44$0$20617$
le Wednesday 01 October 2003 20:52, écrivit :

Non c'est pas faux. Une pile ou une serie de registres speciaux,
c'est du pareil au meme.


alors quel est l'interêt pour le programmeur de connaître des détails sur
le

passage des fonctions, si le mécanisme concret peut varier tout en restant
"du pareil au même" ?


Argument décisif, il me semble...

Chris


Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
writes:

[...]

| > > ET cela manque a bien des programmeurs.

| > Je suis d'accord qu'il est bien de savoir, par exemple, comment
| > une machine représente les entiers en binaire, mais pour bien de
| > domaines d'application, ce savoir ne me semble pas indispensable.
| > Il s'agit de savoir se placer sur le niveau d'abstraction
| > approprié, qui n'est pas le même si on écrit un driver pour un
| > composant réseau (gestion des registres, de la DMA, des
| > interruptions ...) que dans le cas d'une application qui traite
| > des ordres d'achat / vente à la bourse...

| En effet. Si on fait le calcul numérique (ce que font intensemment
| les programmes du marché),

hmm, il n'y a pas si longtemps que ça, tu disais sur ce grooupe que le
calcul numérique représente une minorité. Cela a-t-il changé ?


Et tu crois que ceux qui font les programmes des marchés sont la
majorité des programmeurs ?

Je ne sais pas ce que font la majorité des programmeurs, mais je vois
certains types d'applications qui en utilisent beaucoup : les
applications du reseau ; la gestion classique : suivi des ordres,
facturation, etc. ; les télécoms ; les applications industrielles...

Bien sûr, je connais aussi des domaines où le calcul numérique est
important -- le traitement d'image, les jeux, les programmes du
marché... Mais ils sont loin d'employer le même nombre de programmeurs
que les télécoms, les sites de Web ou de la gestion classique. Enfin, si
je peux en juger d'après les offres d'emploi.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
M.B.
a écrit dans le message news:


Alors, non seulement tu ne connais pas l'architecture des ordinateurs
modernes, mais tu ne comprends même pas le concept de pile.



Cette mauvaise foi ... J'en reviens pas.

MB

Avatar
M.B.
"Samuel Krempp" a écrit dans le
message news: 3f7bef44$0$20617$
le Wednesday 01 October 2003 20:52, écrivit :

Non c'est pas faux. Une pile ou une serie de registres speciaux,
c'est du pareil au meme.


alors quel est l'interêt pour le programmeur de connaître des détails sur
le

passage des fonctions, si le mécanisme concret peut varier tout en restant
"du pareil au même" ?

C'est bien le signe que ce qui est important, c'est de connaître les
propriétés du passage d'arguments, qu'on le voit en terme
d'abstraction -de

boîte noire-, ou bien modélisé d'une certaine façon, en termes
d'abstractions plus bas niveau (registres, pile, ...)
La connaissance d'une modélisation détaillée ou d'une autre n'a pas bcp
d'interêt pour le programmeur (si ce n'est de pouvoir fournir une
explication historique à pourquoi la boîte noire a telle ou telle
propriété). Il devrait pouvoir raisonner sur l'abstraction elle même
jusqu'à s'en faire une image plus précise qu'en raisonnant par analogie
avec une modélisation donnée.


Non, je ne crois pas.

Pas besoin donc d'imposer plus de connaissances aux étudiants qui
découvrent

la programmation.


Si, tout comme des notions elementaires de mecanique au
permis de conduire

Si ils demandent pourquoi c'est comme ça, la réponse est simple : parceque
au moment où le langage est conçu, il l'est de manière à être aussi
performant que possible sur les machines existantes, et les choix sont
donc

fait en fonctions de propriétés de l'architecture des ordinateurs à ce
moment.
références disponibles pour ceux qui veulent des détails, et zou on
continue.



MB


Avatar
M.B.
a écrit dans le message news:


En fait, même sur Intel, quand j'écrivais un noyau temps-réel (où la
performance était critique, et qu'on travaillait en assembleur), je
passais les paramètres par les régistres. Beaucoup plus rapide.



Oui, personne n'a dit le contraire.

MB

Avatar
M.B.
a écrit dans le message news:


L'architecture date de 1946, d'un certain Mr Von Neumann. Rien de
fondamentalement neuf depuis.


Tu veux nous faire rire, ou quoi ?



Non, pas vraiment. Rien de fondamentalement nouveau, disais-je.


La connaissance du fonctionnement de la pile me parait
indispensable pour comprendre les differents types de passage
d'arguments.


Le passage des arguments est une fonctionalite abstraite definie par
le langage, la maniere de l'implementer sur ton architecture n'a
aucune importance. Et je ne vois pas l'utilite d'une pile pour
passer les arguments, on essaie plutot meme de l'eviter. (Je vois
l'utilite de la pile pour garder un contexte quand des appels
recursifs sont possibles, mais tous les langages n'autorisent pas le
recursivite).


Les arguments des fonctions passent TOUJOURS par la pile. Je suis
surpris qu'un programmeur C++ ne sache pas ca.


Je me démande alors comment on fait sur les machines sans pile. Et quand
je régarde le code généré sur mon Sparc, je trouve que les paramètres
simples se trouve dans les régistres, non dans la pile. C'était pareil
sur les machines sous HP/UX.

En fait, le passage des paramètres par la pile est plutôt une solution
exceptionnelle aujourd'hui, nécessité par l'architecture périmée de
certains processeurs, mais à éviter autant que ce peut.

Mais je ne m'attends pas à ce qu'un programmeur des applications en C++
sache ce genre de détail.

D'autant que toutes ces notions sont relativement simples a
assimiler et a comprendre.


Il est possible en effet de presenter une architecture simple
possible d'ordinateur. Son utilite pour apprendre a bien programmer
me semble douteuse. Elle peut avoir l'effet nocif de laisser penser
que la maniere evidente d'implementer quelquechose dessus est la
seule possible.

Et il est pour moi evident que mieux on connait le fonctionnement
interne d'un ordinateur, mieux on peut le programmer.


C'est bizarre, mais j'ai l'impression que la programmation est un
exercice qui consiste a batir des abstractions sur d'autres
abstractions. Et quand on programme en C++, les abstractions de plus
bas niveaux utilisees sont celles fournies par le langage C++, pas
celles de l'architecture ni celles de la micro-architecture.


Le B-A-BA du fonctionnement d'un ordinateur n'a rien d'abstrait. On ne
peut pas trouver plus concret.

A penser a trop bas niveau, on fini par croire que faire des
soustractions pour mettre en minuscule ou mettre un decalage quand
on veut faire une multiplication est savoir bien programmer.





Pas trop bas, juste la ou il faut.

Oui mettre un decalage pour multiplier par une puissance de 2, c'est
savoir programmer avec la connaissance de la machine qu'on programme.




La tienne ?

MB




Avatar
Jonathan Mcdougall
Pas besoin donc d'imposer plus de connaissances aux étudiants qui
découvrent

la programmation.


Si, tout comme des notions elementaires de mecanique au
permis de conduire



Quoi?? Très mauvais exemple à mon avis.


Jonathan


Avatar
Gabriel Dos Reis
writes:

| Gabriel Dos Reis wrote in message
| news:...
| > writes:
|
| > [...]
|
| > | > > ET cela manque a bien des programmeurs.
|
| > | > Je suis d'accord qu'il est bien de savoir, par exemple, comment
| > | > une machine représente les entiers en binaire, mais pour bien de
| > | > domaines d'application, ce savoir ne me semble pas indispensable.
| > | > Il s'agit de savoir se placer sur le niveau d'abstraction
| > | > approprié, qui n'est pas le même si on écrit un driver pour un
| > | > composant réseau (gestion des registres, de la DMA, des
| > | > interruptions ...) que dans le cas d'une application qui traite
| > | > des ordres d'achat / vente à la bourse...
|
| > | En effet. Si on fait le calcul numérique (ce que font intensemment
| > | les programmes du marché),
|
| > hmm, il n'y a pas si longtemps que ça, tu disais sur ce grooupe que le
| > calcul numérique représente une minorité. Cela a-t-il changé ?
|
| Et tu crois que ceux qui font les programmes des marchés sont la
| majorité des programmeurs ?

Ce qui pose la question : qu'est-ce que tu as voulu dire par
« les programmes du marché » ? Parce que la seule signification que je
peux lui donner c'est « les programmes professionnels ».
Probablement, tu as voulu dire quelque chose d'autre, mais
« les programmes du marché » n'est visibelement pas ce que tu as voulu
dire.

-- Gaby
6 7 8 9 10