Bonjour et merci d'avance pour toute réponse
En fait ce n'est pas vraiment une question
mais une demande de confirmation
que ce que je dis ici est exact
_________________
Énoncé
Je comprends tout à fait que ce code
ci-dessous ne pose pas de problème
Je comprends tout à fait que ce code
ci-dessous ne pose pas de problème
La seule explication que j'ai de l'erreur
engendrée par le code ci-dessous
est que la machine une fois qu'elle a lu le prototype
de la fonction de nom "fonctionA"
est qu'elle va lire cette fonction
dont la description est située après le main()
Dans le premier code, x_ est considérée par fonctionA(void) comme une variable globale.
Elle trouve ton pointeur et le modifie.
Dans le deuxième code, le prototype de fonctionA est différent. Cette fois, fonctionA prend un argument (de type int*) et se sert du pointeur qui lui est donné pour modifier la mémoire à l'endroit qu'il pointe.
Dans le troisième code, on revient au prototype initial (sans argument) et alors il est normal que le compilateur ne soit pas content : x_ est un nom qui n'a été défini nulle part, et il n'a aucun moyen de le trouver. Tu pourrais tout aussi bien l'appeler variableMagique ou oubliBete, et tu obtiendrais la même erreur.
Tu peux cependant quand même accéder à la variable x_ sans l'avoir déclarée (en jouant avec la pile de ton programme), mais c'est un hackte que je ne recommanderais ni à un débutant ni à un professionnel
La manière dont gcc trouve le code correspondant au prototype que tu as déclaré est un petit peu complexe, si c'est la question que tu te poses. Mais effectivement, tout se passe comme si gcc te disait "ok, je continue à vérifier le code et je verrai plus tard si je trouve du code associé à cette déclaration et si la fonction concernée est appelée ou pas dans la suite. Mais jamais je trouve un appel sans code ça va ch*er pour toi"
Merci Ulmiere
Je ne m'attendais pas à une réponse aussi rapide (je pensais même que le code C n'est pas considéré comme étant des maths )
Grâce à ta réponse rapide je vais travailler dès ce soir sur la page suivante de mon cahier de code C au lieu de la laisser en blanc
Il fonctionne pour la même raison que le premier code : x_ est considérée comme une variable globale par fonctionA. Par contre, cette fois, la fonction ne modifie pas la valeur *x_, mais se contente de renvoyer son produit avec l'argument u
Oui il modifie, mais revoie revoie le mauvais produit (là tu multiplies par u*u). Il faut renvoyer *x_ si tu modifies.
Tu peux abréger la fonction modifiante en une seule ligne : return(*x_*=u)
il est 1:27 et j'ai ouvert ce sujet hier à 19:10
entre les deux moments il y a eu l'aide de Ulmiere
maintenant quelques heures plus tard j'ai bien conscience que mon compilateur est mal réglé
il ne devrait pas accepter le premier code
(il ne faut jamais déclarer une fonction dans une fonction)
il me dit 0 erreur 0 warning mais un compilateur bien réglé m'aurait envoyé chier avec mon code pourri
Le sujet est complètement résolu
pour faire un truc joli en guise de conclusion
j'ai fait ces deux images pour montrer que c'est bien mon compilateur qui est mal réglé
je trouve que ça fait joli avec la couleur rouge bien visible comme ça même avec l' Alzheimer je ne risque pas de le manquer
(ceci dit je n'aurais jamais cette maladie car je ne suis jamais malade puisque c'est un principe que j'ai adopté)
Bonjour Ulmiere (ah vous êtes là! encore merci!)
concernant mon dernier post
vous êtes d'accord ?
ça fait un peu tape à l'œil un peu mais des fois mieux vaut avoir mal aux yeux qu'avoir l'ordi tout bouzillé n'est-ce pas?
Un mauvais code ne risque pas de bousiller ton ordinateur, ceci dit.
Au sujet des fonctions à l'intérieur de fonctions (les "nested functions"), c'est un peu plus subtil.
Officiellement, on ne peut pas définir de fonction à l'intérieur d'une autre. Mais on peut en déclarer. Ce comportement est toléré en général sur les postes qui tournent sous Linux, mais pas sous Windows. C'est parce que c'est quelque chose de non-officiel, et donc, dépendant du compilateur que tu utilises. Il ne faut pas le faire pour deux raisons
1) Si tu portes ton code de Linux à Windows, il ne fonctionnera sans doute plus
2) La "nested function" n'est pas, en réalité, une vraie fonction. Je n'entre pas dans les détails, mais sache juste que c'est encore un autre concept.
Si tu veux, c'est comme les labels et les goto. Utile pour certaines choses très très pointues, mais c'est fortement déconseillé si tu veux maintenir ton code ou le partager.
Encore une fois merci Ulmiere
Je me sens tellement redevable devant ces explications détaillées en plus de ça
Belle journée à vous
NB j'ai vu des vidéos d'un mec super intelligent (un algérien émigré au states) un type formidable
si il vient ici lire ce que je viens de dire dans mon post précédent il va faire une attaque (sachant que je l'aime à mort tellement il est intelligent
moi quand un(e) type est intelligent je suis comme un gamin devant lui(ou elle )
lui c'est un type du genre concret (et ça lui réussit bien )
sans compter son humour …
enfin bref voilà quoi … il y a des gens qui savent penser et souvent ils ont de l'esprit (et l'humour qui va avec)
quand je pense que toutes les maths sont un langage (en fait je m'en fout qu'il soit écrit en code C )
j'ai le vertige
c'est un langage putain (désolé pour le gros mot mais des fois le mot est trop gros pour une petite cervelle de moineau pour moi et il faut un gros mot pour penser l'impensable)
et certes je l'ai dit plusieurs fois que les maths sont un langage et certes je l'ai dit en sachant que les maths sont un langage (si le mot savoir possède un sens quand on le rapporte à mes capacités de savoir en tant qu'homme préhistorique lambda) mais moi je suis un homme préhistorique et certes je sais que pour les pros c'est banal mais moi là je descend de mon arbre à cloche pied
les conséquences sont terribles (fascinantes certes ) mais pour un petit homme comme moi c'est terrible
si j'avais deux mot à dire à propos des maths en tant que langage j'aurais ces deux mots là:
pour un petit mec (car je suis un petit mec) un petit mec comme moi dira :
c'est terrible et c'est banal mais ces deux mots là ne vont tellement pas ensemble que c'est terrifiant un tel manque d'harmonie pour parler de ce que sont les maths
si j'en parle si mal c'est que je suis comme un singe qui parle des récoltes mondial des bananes sur le marché de Chicago
Dans le même temps les maths ne sont pas présentées comme étant un langage
elles donnent même la définition d'un langage formel
je vais dormir(en fait non j'ai pas sommeil mais mentir c'est humain et j'ai le droit d'être considéré comme un humain )
en fait j'ai pas sommeil
À tant vouloir ressembler aux humains, je ne ressemble plus à rien : autant dire la vérité
j'ai pas sommeil!
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :