Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1160 connectés 

  FORUM HardWare.fr
  Programmation
  C

  fonction hypot ( ) retourne systématiquement 1 !!!!!

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

fonction hypot ( ) retourne systématiquement 1 !!!!!

n°1356932
jipo
Kamoulox !
Posté le 30-04-2006 à 23:59:02  profilanswer
 


AU SECOURS  ! ! !  
 
J'utilise la fonction hypot de la libriairie math.h.
Quelque soient les valeurs passées (des doubles) elle me renvoit 1 ....  :fou:  :fou:  
 
Voici le code :
 
....
      double dxb = (double)xb;
      double dyb = (double)yb;
      double toto = hypot(dxb, dyb);
      toto = hypot(6300.0, 3600.0);
                    Ddep = hypot(dxb,dyb);
 ....
 
J'ai xb = 6300 et yb = 3600
dans tous les cas les variables toto et Ddep reçoivent la valeur 1 dans le debugger DDD.
 
JE COMPREND RIEN ..... bouhouhouhou ...  :sweat:  :sweat:


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
mood
Publicité
Posté le 30-04-2006 à 23:59:02  profilanswer
 

n°1356934
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-05-2006 à 00:26:02  profilanswer
 

jipo a écrit :

J'utilise la fonction hypot de la libriairie math.h.
Quelque soient les valeurs passées (des doubles) elle me renvoit 1 ...


Code non compilable. Poste le code complet compilable mais réduit au minimum qui montre le défaut.
(avec mon code de test, je n'ai pas le problème signalé) :

Ddep = 7256.031973


 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357000
jipo
Kamoulox !
Posté le 01-05-2006 à 11:45:14  profilanswer
 

Voici un code réduit qui me pose problème :
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4. #include <math.h>
  5. #include <sys/types.h>
  6. #include <unistd.h>
  7. int xb, yb;
  8. double Ddep1, Ddep2;
  9. int main(int argc, char **argv)
  10. {
  11. xb =  6300;
  12. yb =  3600;
  13. double dxb = (double)xb;
  14. double dyb = (double)yb;
  15. Ddep1 = sqrt(dxb*dxb + dyb*dyb);
  16. Ddep2 = hypot(dxb,dyb);
  17. return(0);
  18. }


 
Ddep1 contient la bonne valeur mais Ddep2 contient 1 apres appel de hypot ...
Mon système fedora core 4 serait vérolé ???  :lol:  :lol:


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357008
nargy
Posté le 01-05-2006 à 11:59:34  profilanswer
 

est tu sûr? moi ça fonctionne.
qq remarques:
- hypot() peut s'avérer plus lent sur certains systèmes
- sqrt() est très lente comme fonction, vérifie que tu en a vraiment besoin

n°1357013
theshockwa​ve
I work at a firm named Koslow
Posté le 01-05-2006 à 12:02:37  profilanswer
 

tu compiles avec des optimisations ?

n°1357028
jipo
Kamoulox !
Posté le 01-05-2006 à 12:10:55  profilanswer
 

Ci-dessous mon makefile :
 

Code :
  1. CC=gcc
  2. OBJECTS= test_hypot.o
  3. INCDIR= ../inc
  4. ifeq ($(dbg), y)
  5. CFLAGS=-Wall -ansi -g
  6. LDFLAGS=-Wall -ansi -g
  7. EXEC=test_hypot_dbg
  8. else
  9. CFLAGS=-Wall -ansi
  10. LDFLAGS=-Wall -ansi
  11. EXEC=test_hypot
  12. endif
  13. all: $(EXEC)
  14. $(EXEC):$(OBJECTS)
  15. $(CC) -o $(EXEC) $(OBJECTS) $(LDFLAGS) -L/usr/X11R6/lib64 -lXm -lXt -lX11 -lm
  16. test_hypot.o: test_hypot.c
  17. $(CC) -o test_hypot.o -c test_hypot.c $(CFLAGS)
  18. clean:
  19. rm -f $(EXEC) *.o


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357032
jipo
Kamoulox !
Posté le 01-05-2006 à 12:12:30  profilanswer
 

nargy a écrit :

est tu sûr? moi ça fonctionne.
qq remarques:
- hypot() peut s'avérer plus lent sur certains systèmes
- sqrt() est très lente comme fonction, vérifie que tu en a vraiment besoin


 
Non j'ai pas besoin de sqrt ( )
Je l'ai mis là juste pour test car cet appel est sensé me fournir le meme résultat que hypot, non ?


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357037
nargy
Posté le 01-05-2006 à 12:17:00  profilanswer
 

ce que je voulais dire, c'est que si tu a simplement besoin de comparer deux rayons, tu peut te passer de la racine carrée, puisque lorsque x>0 et y>0:
x=y <=> x²=y²
x>y <=> x²>y²

n°1357048
jipo
Kamoulox !
Posté le 01-05-2006 à 12:24:53  profilanswer
 

Non en fait il s'agit d'obtenir des distances à partir de coordonnées
 


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357080
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-05-2006 à 13:19:12  profilanswer
 

jipo a écrit :

Voici un code réduit qui me pose problème :
Ddep1 contient la bonne valeur mais Ddep2 contient 1 apres appel de hypot ...


Comment tu la sais ? Tu ne fais pas d'affichage. Chez moi, avec le debugger, c'est OK :  
 
http://mapage.noos.fr/emdel/images/hypot.png
 
Et avec printf() aussi :  

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4. #include <math.h>
  5. #include <sys/types.h>
  6. #include <unistd.h>
  7. int xb, yb;
  8. double Ddep1, Ddep2;
  9. int main(int argc, char **argv)
  10. {
  11. xb =  6300;
  12. yb =  3600;
  13. double dxb = (double)xb;
  14. double dyb = (double)yb;
  15. Ddep1 = sqrt(dxb*dxb + dyb*dyb);
  16. Ddep2 = hypot(dxb,dyb);
  17. printf ("Ddep1 = %f\n", Ddep1);
  18. printf ("Ddep2 = %f\n", Ddep2);
  19. return(0);
  20. }



Ddep1 = 7256.031973
Ddep2 = 7256.031973



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 01-05-2006 à 13:19:12  profilanswer
 

n°1357183
jipo
Kamoulox !
Posté le 01-05-2006 à 15:22:25  profilanswer
 

Je vérifie le contenu de la variable Ddep dans DDD. Il m'affiche systématiquement 1.
 
Je vois que tu utilises codeblocks. Est-ce que c'est bien ? On peut debugger via l'ide ? Le debugger mieux ou moins bien que ddd ?
 


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357218
Sve@r
Posté le 01-05-2006 à 15:58:55  profilanswer
 

jipo a écrit :

Je vérifie le contenu de la variable Ddep dans DDD. Il m'affiche systématiquement 1.
 
Je vois que tu utilises codeblocks. Est-ce que c'est bien ? On peut debugger via l'ide ? Le debugger mieux ou moins bien que ddd ?


J'ai tapé ton code tel quel, comme l'a fait Emmanuel, et chez-moi ça me donne comme pour Emmanuel la bonne valeur.
Au lieu d'utiliser un débuggeur (l'utilises-tu correctement ?) fais donc un simple printf("%f - %f\n", Ddep1, Ddep2) en fin de main...
 
Tu trouveras code::Blocks ici: http://www.codeblocks.org


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357435
jipo
Kamoulox !
Posté le 01-05-2006 à 22:08:29  profilanswer
 

J'ai fait exactement ce que vous avez demandé :  
J'obtiens :

Code :
  1. [jipo@localhost mdes_pre]$ ./test_hypot
  2. 7256.031973 - 1.000000


 
Voilà. Donc il y a un problème !  [:audi]  [:audi]  Je devrais pas en être fier  [:aztechxx]


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357452
Sve@r
Posté le 01-05-2006 à 23:07:08  profilanswer
 

jipo a écrit :

J'ai fait exactement ce que vous avez demandé :  
J'obtiens :

Code :
  1. [jipo@localhost mdes_pre]$ ./test_hypot
  2. 7256.031973 - 1.000000


 
Voilà. Donc il y a un problème !  [:audi]  [:audi]  Je devrais pas en être fier  [:aztechxx]


 
Hum, je dirais bien qu'il faut débugger l'interface chaise<->clavier mais ça risque de vexer  :D  
Bon, j'ai pas d'idée sur la cause réelle de l'erreur. La seule chose que je puisse proposer est que tu testes ton pgm sur un autre système (ptet que "hypot" n'est pas implémenté sur Fedora ?)
Une solution pas trop destructrice serait que tu télécharges une version "move" de Linux pour que tu puisses tester rapidement ton pgm sans avoir besoin de tout réinstaller...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357535
Taz
bisounours-codeur
Posté le 02-05-2006 à 07:45:59  profilanswer
 

jipo a écrit :

J'ai fait exactement ce que vous avez demandé :  
J'obtiens :

Code :
  1. [jipo@localhost mdes_pre]$ ./test_hypot
  2. 7256.031973 - 1.000000


 
Voilà. Donc il y a un problème !  [:audi]  [:audi]  Je devrais pas en être fier  [:aztechxx]


ça n'est pas la sortie du programme minimale qu'à donner Emmanuel. Teste le telquel.

n°1357596
Sve@r
Posté le 02-05-2006 à 10:41:13  profilanswer
 

jipo a écrit :

J'ai fait exactement ce que vous avez demandé :  
J'obtiens :

Code :
  1. [jipo@localhost mdes_pre]$ ./test_hypot
  2. 7256.031973 - 1.000000


 
Voilà. Donc il y a un problème !  [:audi]  [:audi]  Je devrais pas en être fier  [:aztechxx]


 
Je viens de tester sur une Aurox le code (minimal) suivant :


#include <math.h>
#include <stdio.h>
int main()
{
      printf("%f\n", hypot(10.0, 15.0));
}


J'obtiens 18,027756...
 
[:edit:] J'avais oublié les guillemets fermants

Message cité 2 fois
Message édité par Sve@r le 02-05-2006 à 11:01:52

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357604
jipo
Kamoulox !
Posté le 02-05-2006 à 10:44:14  profilanswer
 

Aussi taudis aussi teuffait ...
 
Et voici la sortie :
Ddep1 = 7256.031973
Ddep2 = 1.000000
 
Pour info : IL S'AGIT D'UNE AUTRE MACHINE : RED HAT AS 4 64bits. Chez moi c'était une fedora core 4 64 bits : dans les deux cas il y a anomalie
 
Des idées. Problème de config ? Mon makefile ? Pas les bonnes libs ?
Je sais plus moi ...


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357606
jipo
Kamoulox !
Posté le 02-05-2006 à 10:49:06  profilanswer
 

Sve@r a écrit :

Je viens de tester sur une Aurox le code (minimal) suivant :


#include <math.h>
#include <stdio.h>
int main()
{
      printf("%f\n, hypot(10.0, 15.0));
}


J'obtiens 18,027756...


 
Avec l'exemple minimaliste, j'obtiens :
0.000000
 [:alvas]  [:alvas]  [:alvas]  [:alvas]  [:alvas]


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357611
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 10:55:49  profilanswer
 

Sve@r a écrit :

Je viens de tester sur une Aurox le code (minimal) suivant :


Ne compile pas !

Code :
  1. #include <math.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.    printf("%f\n", hypot(10.0, 15.0));
  6.    return 0;
  7. }

18.027756


 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357612
jipo
Kamoulox !
Posté le 02-05-2006 à 10:56:08  profilanswer
 

Ah une piste ...
Effectivement : des valeurs entre 0 et 1 ...  
 
Et alors y a-t-il un parametrage particulier ? Un paramètre qui serait pas bon qqpart ?


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357619
jipo
Kamoulox !
Posté le 02-05-2006 à 11:00:53  profilanswer
 

Emmanuel Delahaye a écrit :

Ne compile pas !

Code :
  1. #include <math.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5.    printf("%f\n", hypot(10.0, 15.0));
  6.    return 0;
  7. }

18.027756



 
Implicitement si après correction ... ce qui avait été fait ...  :jap:


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357626
Sve@r
Posté le 02-05-2006 à 11:06:28  profilanswer
 

jipo a écrit :

Aussi taudis aussi teuffait ...
 
Et voici la sortie :
Ddep1 = 7256.031973
Ddep2 = 1.000000
 
Pour info : IL S'AGIT D'UNE AUTRE MACHINE : RED HAT AS 4 64bits. Chez moi c'était une fedora core 4 64 bits : dans les deux cas il y a anomalie
 
Des idées. Problème de config ? Mon makefile ? Pas les bonnes libs ?


 
Pas besoin de Makefile pour ça
cc -c toto.c
cc -lm toto.o -o toto
 

jipo a écrit :

Je sais plus moi ...


Nous (moi) non plus  :??:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357629
Elmoricq
Modérateur
Posté le 02-05-2006 à 11:10:08  profilanswer
 

Idem.  
 
J'ai tout testé de mon côté (Solaris 8), y compris l'inclusion des bibliothèques 64-bits du monsieur (inutile, bien sûr)... rien. Nada. Que dalle.

n°1357630
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:10:21  profilanswer
 

jipo a écrit :

Ah une piste ...
Effectivement : des valeurs entre 0 et 1 ...  
 
Et alors y a-t-il un parametrage particulier ? Un paramètre qui serait pas bon qqpart ?


As-tu fait "man hypot" sur tes machines 64 bits ? Il y a peut être un bug, une remarque...
 
Ce que je constate déjà, c'est que ce n'est pas une fonction standard C99. Vu du langage C, le comportement est donc indéfini. rien à dire. Le 1 (ou le 0) sont 'normaux', puisque tout peut arriver...
 
Par contre, elle existe en C99.

Citation :

n1124
7.12.7.3 The hypot functions
Synopsis
1 #include <math.h>
double hypot(double x, double y);
float hypotf(float x, float y);
long double hypotl(long double x, long double y);
Description
2 The hypot functions compute the square root of the sum of the squares of x and y,
without undue overflow or underflow. A range error may occur.
3 Returns
4 The hypot functions return ⎯√⎯⎯x⎯2 ⎯+⎯y2.


Quel est ton compîlateur (version etc.)


Message édité par Emmanuel Delahaye le 02-05-2006 à 11:22:08

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357634
jipo
Kamoulox !
Posté le 02-05-2006 à 11:13:37  profilanswer
 

Voici la page :
 


NAME
       hypot, hypotf, hypotl - Euclidean distance function
 
SYNOPSIS
       #include <math.h>
 
       double hypot(double x, double y);
 
       float hypotf(float x, float y);
 
       long double hypotl (long double x, long double y);
 
DESCRIPTION
       The hypot() function returns sqrt(x*x+y*y).  This is the length of the
       hypotenuse of a right-angle triangle with sides of length x and y,  or
       the distance of the point (x,y) from the origin.
 
CONFORMING TO
       SVID  3, BSD 4.3, C99.  The float and the long double variants are C99
       requirements.
 
SEE ALSO
       sqrt(3), cabs(3)



---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357636
jipo
Kamoulox !
Posté le 02-05-2006 à 11:24:20  profilanswer
 

Avec la simple compile depuis cc ci-dessus, j'obtiens le bon résultat ... bizarre non ?
Que pensez-vous de mes options de compilation dans le makefile ?
 
Apres test de la compile et du link sans les options -Wall -ansi le programme renvoit le bon résultat !
 
-Wall -ansi ?????
 
J'aimerais bien avoir le fin mot de l'histoire ....
 
 
 
 


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357640
jipo
Kamoulox !
Posté le 02-05-2006 à 11:28:35  profilanswer
 


gcc -v :
 


Reading specs from /usr/lib/gcc/x86_64-redhat-linux/3.4.3/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,java,f77 --enable-java-awt=gtk --host=x86_64-redhat-linux
Thread model: posix
gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357645
Sve@r
Posté le 02-05-2006 à 11:31:42  profilanswer
 

jipo a écrit :

J'aimerais bien avoir le fin mot de l'histoire ....


Ben ta machine est pourrie. Mais pour te faire plaisir, je te la rachète 100... non 150 euro...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357647
Taz
bisounours-codeur
Posté le 02-05-2006 à 11:33:24  profilanswer
 

normal, -ansi tu fais disparaitre les proto des fonctions pas ansi. ça doit gueuler. résultat, gcc synthétise un proto pour hypt tel que int hypot(int) ... et donc ça chie. c'est typique.
 
c'est la même chose que l'histoire de malloc sans <stdlib.h>

n°1357651
jipo
Kamoulox !
Posté le 02-05-2006 à 11:34:46  profilanswer
 

Je peux pas la revendre ... C'est une lame 64 bits qui coute les yeux de la tête à mon employeur ...


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357655
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:36:53  profilanswer
 

jipo a écrit :

Avec la simple compile depuis cc ci-dessus, j'obtiens le bon résultat ... bizarre non ?
Que pensez-vous de mes options de compilation dans le makefile ?
 
Apres test de la compile et du link sans les options -Wall -ansi le programme renvoit le bon résultat !
 
-Wall -ansi ?????
 
J'aimerais bien avoir le fin mot de l'histoire ....


-ansi force le mode C90. En C90, hypot() n'est pas définie. Le comportement est donc indéterminé.
Essaye -std=c99 à la place.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357656
jipo
Kamoulox !
Posté le 02-05-2006 à 11:37:24  profilanswer
 

Taz a écrit :

normal, -ansi tu fais disparaitre les proto des fonctions pas ansi. ça doit gueuler. résultat, gcc synthétise un proto pour hypt tel que int hypot(int) ... et donc ça chie. c'est typique.
 
c'est la même chose que l'histoire de malloc sans <stdlib.h>


 
Conclusion : Il faut juste que je compile sans -ansi ? Ou alors y a-t-il une définition de fonction pour hypot dans une autre lib qui soit compatible avec l'option -ansi ?
 
Désolé je démarre sous Linux ... et en plus en C ... [:aztechxx]  


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357666
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 11:46:34  profilanswer
 

jipo a écrit :

Conclusion : Il faut juste que je compile sans -ansi ? Ou alors y a-t-il une définition de fonction pour hypot dans une autre lib qui soit compatible avec l'option -ansi ?
 
Désolé je démarre sous Linux ... et en plus en C ... [:aztechxx]


Je viens de te le dire : Retire -ansi et mets -std=c99 à la place. Il faut lire les réponses, on va pas passer notre temps à se répéter indéfiniment...
 
Je conseille :  

-Wall -Wextra -O2 -std=c99


 
Et C99, c'est du C. (Rien à voir avec Linux)


Message édité par Emmanuel Delahaye le 02-05-2006 à 11:47:01

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357672
Sve@r
Posté le 02-05-2006 à 11:49:12  profilanswer
 

Emmanuel Delahaye a écrit :

-ansi force le mode C90. En C90, hypot() n'est pas définie. Le comportement est donc indéterminé.


Hum, ya qqchose qui m'échape
-ansi force le code à être écrit à la norme ansi. Mais en quoi cette écriture empêche-t-elle d'exécuter une fonction déjà écrite et compilée et présente dans la librairie "libm" (et probablement prototypée dans "math.h" ) ?


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357673
jipo
Kamoulox !
Posté le 02-05-2006 à 11:49:15  profilanswer
 

Emmanuel Delahaye a écrit :

-ansi force le mode C90. En C90, hypot() n'est pas définie. Le comportement est donc indéterminé.
Essaye -std=c99 à la place.


 
Merci :
 
Effectivement cela fonctionne.
Est-ce une situation normale ? Je veux dire : est-ce normal dans mon cas d'utiliser -std=c99 en lieu et place de -ansi ? Ou alors c'est juste une rustinerie  pour que cela marche chez moi ?
 
Ou autrement dit : Est-ce que mes options de compil étaient nulles et moi avec  [:audi]  ?
 
En tout cas merci à tous  :hello:  


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357675
jipo
Kamoulox !
Posté le 02-05-2006 à 11:51:27  profilanswer
 

A part la page gnu.org sur gcc, y a-t-il une autre source de documentation avec des EXEMPLES sur l'utilisation de gcc ?


---------------
"Comme des pommes d'or sur des ciselures d'argent, Ainsi est une parole dite à propos" (Proverbes de Salomon)
n°1357718
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 12:54:45  profilanswer
 

Sve@r a écrit :

-ansi force le code à être écrit à la norme ansi. Mais en quoi cette écriture empêche-t-elle d'exécuter une fonction déjà écrite et compilée et présente dans la librairie "libm" (et probablement prototypée dans "math.h" ) ?


-ansi a le même sens que -std=c90. Ca provoque probablement la mise en commentaire des prototypes des fonctions non conformes à C90. L'appel se faisant sans prototype (activer les warnings...), le comportement est indéterminé.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 02-05-2006 à 12:56:16

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357722
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 12:59:02  profilanswer
 

jipo a écrit :


Est-ce une situation normale ? Je veux dire : est-ce normal dans mon cas d'utiliser -std=c99 en lieu et place de -ansi ?


Ben oui. Tu utilises une fonction de C99. Il est normal de s'assurer que le compilateur est bien utilisé dans le bon mode...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1357735
Sve@r
Posté le 02-05-2006 à 13:24:05  profilanswer
 

Emmanuel Delahaye a écrit :

Ca provoque probablement la mise en commentaire des prototypes des fonctions non conformes à C90.


Evidemment - Partant de là...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1357745
Emmanuel D​elahaye
C is a sharp tool
Posté le 02-05-2006 à 13:35:12  profilanswer
 

Sve@r a écrit :

Evidemment - Partant de là...


C'est logique non ? Les modes -ansi ou -std=xxx sont des modes stricts. Pas d'extension.
 
On est pas obligé de les utiliser, mais attention à la portabilité (il n'y a pas gcc partout !)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  fonction hypot ( ) retourne systématiquement 1 !!!!!

 

Sujets relatifs
Somme champs via fonction DECALERFonction faire resortir valeur
Affichage d'annonces en fonction de la distanceExécuter une fonction à distance
Repetition d'une fonction private sub en VB[résolu] Problème fonction remplacer les accents
style="cursor: url('cursors.cur') dans une fonction JS[asp][debutant]fonction et bouton...
Probleme sur une fonction !!plynôme (fonction)
Plus de sujets relatifs à : fonction hypot ( ) retourne systématiquement 1 !!!!!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR