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

 

 

 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15
Auteur Sujet :

[Topic unique] débats sur les langages

n°465788
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:20:25  profilanswer
 

Reprise du message précédent :

chrisbk a écrit :

De l'interet de "->" en C
 
 
Je precise que je sais a quoi sert "->" en C, c'est a dire dans quel cas on l'utilise
 
Ma question est, pour dire les choses simplement :

Code :
  1. struct toto
  2. {
  3. ..
  4. }
  5. toto *a;
  6. ...
  7. a->membre = ..; //valide
  8. a.membre = ..;  //non-valide


 
Pourquoi a.membre n'est il pas valide en C ? Ou plutot, pourquoi a t'il ete decide que a.membre ne serait pas valide ? Car je ne vois pas du tout les ambiguite que "->" peut lever. Connaissant le type de "a", pourquoi mon compilo ne remplacerait il pas "a.membre" par "a->membre" au lieu de m'imposer ces contorsions ?
 
 
 


 
Pour résumer un peu ce qui a été dit ailleur:
 
1) c plus lisible, on sait tout de suite qu'on est en train de bosser sur un pointeur et pas sut une structure ou une union.
2) Comme le . et la -> ne se traduisent pas par les même suite d'opérations il parait logique d'avoir introduit deux opérateurs distincts.


---------------
Le Tyran
mood
Publicité
Posté le 23-07-2003 à 14:20:25  profilanswer
 

n°465789
harrysauce
Miaaaooou!
Posté le 23-07-2003 à 14:21:33  profilanswer
 

chrisbk a écrit :

Pourquoi a.membre n'est il pas valide en C ?


Parce que a est un pointeur, pas un objet.
 

chrisbk a écrit :

Car je ne vois pas du tout les ambiguite que "->" peut lever. Connaissant le type de "a", pourquoi mon compilo ne remplacerait il pas "a.membre" par "a->membre" au lieu de m'imposer ces contorsions ?


C'est pas vraiment une ambiguité, c'est juste plus simple.
Pour acceder un élement membre de la struct toto à partir d'un pointeur sur cette struct la vrai syntaxe est :
 
(*a).membre = ...;
qui dc peut être remplacé par
a->membre = ...;

n°465791
chrisbk
-
Posté le 23-07-2003 à 14:22:38  profilanswer
 

LetoII a écrit :


 
Pour résumer un peu ce qui a été dit ailleur:
 
1) c plus lisible, on sait tout de suite qu'on est en train de bosser sur un pointeur et pas sut une structure ou une union.
2) Comme le . et la -> ne se traduisent pas par les même suite d'opérations il parait logique d'avoir introduit deux opérateurs distincts.


 
autant pour le 1 je suis d'accord, autant pour le 2 je ne veux pas le savoir. Je veux dire, tu utilise bien + pour les entier et les flottants lors que ca n'est pas la meme suite d'operation derriere hein ? [:ddr555]  
 
 

n°465792
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2003 à 14:22:49  profilanswer
 

En Delphi l'équivalent de -> est ^.
mais si on met . ça passe dans la majorité des cas :)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°465793
lorill
Posté le 23-07-2003 à 14:23:51  profilanswer
 


ayé, on retourne en rond... C'est pas ca la question, on connait la différence entre '.' et '->', la question, c'est pourquoi ne pas utiliser le même opérateur pour ces deux opérations, sachant que le compilo sait si c'est un pointeur ou pas.
 
A mon avis :
- pas la même opération, donc pas le même opérateur
- pour rappeler au developpeur que sa variable est un pointeur

n°465795
chrisbk
-
Posté le 23-07-2003 à 14:24:17  profilanswer
 

antp a écrit :

En Delphi l'équivalent de -> est ^.
mais si on met . ça passe dans la majorité des cas :)


 
^ ?? Au moins en C on peut se targuer d'une certaine esthetisme :D
 
Dans quel cas ca passe pas ?


Message édité par chrisbk le 23-07-2003 à 14:25:36
n°465799
skeye
Posté le 23-07-2003 à 14:24:53  profilanswer
 

chrisbk a écrit :


 
autant pour le 1 je suis d'accord, autant pour le 2 je ne veux pas le savoir. Je veux dire, tu utilise bien + pour les entier et les flottants lors que ca n'est pas la meme suite d'operation derriere hein ? [:ddr555]  
 
 
 


Oui, mais le '+' a toujours un comportement qui parait naturel (i.e. le comportement qu'il a en mathématiques...).
Perso ca me parait pas naturel d'utiliser le même opérateur pour accéder à un membre de la structure directement ou via son adresse...

n°465803
skeye
Posté le 23-07-2003 à 14:26:22  profilanswer
 

antp a écrit :

En Delphi l'équivalent de -> est ^.
mais si on met . ça passe dans la majorité des cas :)


Si ca passe pas seulement une fois de temps en temps c'est encore pire... :heink:

n°465804
chrisbk
-
Posté le 23-07-2003 à 14:27:12  profilanswer
 

skeye a écrit :


Oui, mais le '+' a toujours un comportement qui parait naturel (i.e. le comportement qu'il a en mathématiques...).
Perso ca me parait pas naturel d'utiliser le même opérateur pour accéder à un membre de la structure directement ou via son adresse...


 
 
vouii, certes, ou c'est juste une question d'habitude ? :D
 
ca travaille personne d'utiliser "." en C alors que l'on bosse sur une reference (qui n'est qu'un pointeur deguisé) ?
 
 
 

n°465806
harrysauce
Miaaaooou!
Posté le 23-07-2003 à 14:27:31  profilanswer
 

lorill a écrit :


ayé, on retourne en rond... C'est pas ca la question, on connait la différence entre '.' et '->', la question, c'est pourquoi ne pas utiliser le même opérateur pour ces deux opérations, sachant que le compilo sait si c'est un pointeur ou pas.
 
A mon avis :
- pas la même opération, donc pas le même opérateur
- pour rappeler au developpeur que sa variable est un pointeur

scuse, j'arrive au milieu de la discussion [:joce]
Sinon ben je sais pas trop, mais ca me parait tellement logique de mettre (*a). ou a-> que je vois meme pas pourquoi chercher une raison [:spamafote]

mood
Publicité
Posté le 23-07-2003 à 14:27:31  profilanswer
 

n°465808
skeye
Posté le 23-07-2003 à 14:28:26  profilanswer
 

chrisbk a écrit :


 
 
vouii, certes, ou c'est juste une question d'habitude ? :D
 
ca travaille personne d'utiliser "." en C alors que l'on bosse sur une reference (qui n'est qu'un pointeur deguisé) ?


Si...d'ailleurs la plupart du temps j'utilise des pointeurs...mauvaise (?) habitude! [:skeye]

n°465809
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:28:26  profilanswer
 

chrisbk a écrit :


 
autant pour le 1 je suis d'accord, autant pour le 2 je ne veux pas le savoir. Je veux dire, tu utilise bien + pour les entier et les flottants lors que ca n'est pas la meme suite d'operation derriere hein ? [:ddr555]  
 
 
 


 
Conceptuellement c pas pareil:
 
int + int ou float + float, c je prend la valeur contenue dans la vraible 1 et je l'additionne à la valeur contenue dans la variable 2
 
pointeur->mebre C 'est je prend l'adresse dans la première variable, et je prend la valeur qui se trouve à certain offset à cette adrese.
 
strucutre.membre c'est je prend la valeur qui se trouve à un certain offset à partir du début de la première variable


---------------
Le Tyran
n°465810
antp
Super Administrateur
Champion des excuses bidons
Posté le 23-07-2003 à 14:28:32  profilanswer
 

chrisbk a écrit :


 
^ ?? Au moins en C on peut se targuer d'une certaine esthetisme :D
 
Dans quel cas ca passe pas ?


 

skeye a écrit :


Si ca passe pas seulement une fois de temps en temps c'est encore pire... :heink:  


 
Je pense (si je me souviens bien) que quand tu fais
 
with Pointeur do  
  ...
tu dois mettre le ^ derrière Pointeur, sinon il râle parce que dans le with tu dois avoir une structure ou un objet.
 
Donc c'est pas vraiment un ^. :D
 
Pour ce qui est de l'esthétisme, un "^" fait plus penser à un pointeur qu'un "*" je trouve :D
(vu qu'ici ^ est utilisé comme le * du C, donc dans les déclarations de types/variables aussi)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°465813
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:30:33  profilanswer
 

chrisbk a écrit :


 
 
vouii, certes, ou c'est juste une question d'habitude ? :D
 
ca travaille personne d'utiliser "." en C alors que l'on bosse sur une reference (qui n'est qu'un pointeur deguisé) ?
 
 
 
 


 
Conceptuellement la référence et le pointeur spas tt à fait pareil non plus.


---------------
Le Tyran
n°465816
skeye
Posté le 23-07-2003 à 14:33:53  profilanswer
 

LetoII a écrit :


Conceptuellement la référence et le pointeur spas tt à fait pareil non plus.


Pour moi l'utilité des références reste quand même l'un des grands mystères du C++, qd même...si c'est juste pour pouvoir mettre un '.' à la place de '->'... :sarcastic:  
citation du méga cours de C. Casteyde:

Citation :


Les références permettent simplement d'obtenir le même résultat que les pointeurs, mais avec une plus grande facilité d'écriture.

n°465819
chrisbk
-
Posté le 23-07-2003 à 14:36:19  profilanswer
 

Citation :

(..)
 
strucutre.membre c'est je prend la valeur qui se trouve à un certain offset à partir du début de la première variable


 
 
Vivi, ok, mais d'un certain point de vue est ce que ce genre de plaisanterie ne devrait il pas etre laissé a la charge du compilo ? (ou alors c'etait encore un truc facon "tout a la charge du programmeur" ?) Parce que finalement, ce qu'il fait derriere pour ca on s'en fout un peu non ?
 
 
 

LetoII a écrit :


 
Conceptuellement la référence et le pointeur spas tt à fait pareil non plus.


 
hum...
 
au final ton "." de la reference va avoir le meme comportement que le "->" de ton pointeur...
 
( je te concede qu'on aurait eu l'air con si -> avait ete choisi a la place de . pour les references)
 

n°465820
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:36:39  profilanswer
 

skeye a écrit :


Pour moi l'utilité des références reste quand même l'un des grands mystères du C++, qd même...si c'est juste pour pouvoir mettre un '.' à la place de '->'... :sarcastic:  
citation du méga cours de C. Casteyde:

Citation :


Les références permettent simplement d'obtenir le même résultat que les pointeurs, mais avec une plus grande facilité d'écriture.




 
La référence a plusieurs avantages fasse au pointeur: sauf maneuvre hazardeuse, y a tjrs qqc au bout d'une référence, une référence peut être utilisée en lieu et place d'un objet sans avoir recours à un cast.


Message édité par LetoII le 23-07-2003 à 14:38:47

---------------
Le Tyran
n°465823
chrisbk
-
Posté le 23-07-2003 à 14:38:45  profilanswer
 

skeye a écrit :


Pour moi l'utilité des références reste quand même l'un des grands mystères du C++, qd même...si c'est juste pour pouvoir mettre un '.' à la place de '->'... :sarcastic:  
citation du méga cours de C. Casteyde:

Citation :


Les références permettent simplement d'obtenir le même résultat que les pointeurs, mais avec une plus grande facilité d'écriture.




 
 
tiens :D
 

Code :
  1. template <class T>
  2. class tableau
  3. {
  4.   T & operator [] (int a);
  5.   ...
  6. }


 
Now you know :D
 
ici, sans la ref, tu ne pourras pas acceder en lecture/ecriture au objets contenus dans tableau sans faire de violente contorsions. avec la ref t peinard
 
 
 
 
 
 
 

n°465824
skeye
Posté le 23-07-2003 à 14:39:14  profilanswer
 

LetoII a écrit :


 
La référence a plusieurs avantages fasse au pointeur: sauf maneuvre hazardeuse, y a tjrs qqc au bout d'une référence, une référence peut être utilisée en lieu et place d'un objet.


Sauf manoeuvre ([:aloy]) hasardeuse, tu n'utilises pas un pointeur avant de vérifier qu'il est valide... [:skeye]
Bon ok, ca évite des vérifs...

n°465829
chrisbk
-
Posté le 23-07-2003 à 14:40:39  profilanswer
 

skeye a écrit :


Sauf manoeuvre ([:aloy]) hasardeuse, tu n'utilises pas un pointeur avant de vérifier qu'il est valide... [:skeye]
Bon ok, ca évite des vérifs...


 
oui mais ca tu ne le peux pas tout le temps [:aloy]

n°465832
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:41:27  profilanswer
 

chrisbk a écrit :

Citation :

(..)
 
strucutre.membre c'est je prend la valeur qui se trouve à un certain offset à partir du début de la première variable


 
 
Vivi, ok, mais d'un certain point de vue est ce que ce genre de plaisanterie ne devrait il pas etre laissé a la charge du compilo ? (ou alors c'etait encore un truc facon "tout a la charge du programmeur" ?) Parce que finalement, ce qu'il fait derriere pour ca on s'en fout un peu non ?
 
 
 
 
 
hum...
 
au final ton "." de la reference va avoir le meme comportement que le "->" de ton pointeur...
 
( je te concede qu'on aurait eu l'air con si -> avait ete choisi a la place de . pour les references)
 
 


 
C pas par ce que c implémenté pareil que c le même concepte. Le pointeur c l'adresse d'une variable, la reference c une entité utilisée en lieu et place d'une autre.


---------------
Le Tyran
n°465834
skeye
Posté le 23-07-2003 à 14:42:09  profilanswer
 

chrisbk a écrit :


tiens :D
 

Code :
  1. template <class T>
  2. class tableau
  3. {
  4.   T & operator [] (int a);
  5.   ...
  6. }


 
Now you know :D
 
ici, sans la ref, tu ne pourras pas acceder en lecture/ecriture au objets contenus dans tableau sans faire de violente contorsions. avec la ref t peinard


beuh...j'aime pas les templates... :lol:
Et dire que c'est parti d'une question à 2 balles... :sweat:

n°465837
Mr yvele
yvele n'est plus.
Posté le 23-07-2003 à 14:43:20  profilanswer
 

http://forum.hardware.fr/icones/flagn1.gif


---------------
yvele n'est plus.
n°465838
skeye
Posté le 23-07-2003 à 14:44:07  profilanswer
 

chrisbk a écrit :


 
oui mais ca tu ne le peux pas tout le temps [:aloy]


Alors tu peux pas tout le temps garantir que ta référence est valide non plus (cf ton exemple de tout à l'heure, si mes souvenirs sont bons... :whistle:).

n°465840
noldor
Rockn'roll
Posté le 23-07-2003 à 14:44:23  profilanswer
 

la référence est 'safer' qu'un pointeur, non ?

n°465842
chrisbk
-
Posté le 23-07-2003 à 14:45:39  profilanswer
 

skeye a écrit :


Alors tu peux pas tout le temps garantir que ta référence est valide non plus (cf ton exemple de tout à l'heure, si mes souvenirs sont bons... :whistle:).


 
disons que mon exemple c'etait un peu quand meme cradingue :D
 
alors qu'un pointeur ....
 

Code :
  1. int *a = malloc(...)
  2. free(a);
  3. //ici tu n'as aucun moyen de savoir que a n'est plus un pointeur valide

n°465843
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:46:08  profilanswer
 

noldor a écrit :

la référence est 'safer' qu'un pointeur, non ?


 
Ouai mais t'as tjrs un con pour faire ça:
 

Code :
  1. MaClass *o = new MaClass();
  2. MaClass &r = *o;
  3. delete o;

[:spamafote]


---------------
Le Tyran
n°465846
lorill
Posté le 23-07-2003 à 14:47:18  profilanswer
 

LetoII a écrit :


Ouai mais t'as tjrs un con pour faire ça:


la gestion automatique de la mémoire, c'est bien [:dawa]

n°465849
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 14:48:11  profilanswer
 

lorill a écrit :


la gestion automatique de la mémoire, c'est bien [:dawa]


 
Vive les smart pointer! :D


---------------
Le Tyran
n°465853
chrisbk
-
Posté le 23-07-2003 à 14:49:12  profilanswer
 

lorill a écrit :


la gestion automatique de la mémoire, c'est bien [:dawa]


 
tu m'etonnes

n°465858
skeye
Posté le 23-07-2003 à 14:52:32  profilanswer
 

chrisbk a écrit :


 
disons que mon exemple c'etait un peu quand meme cradingue :D
 
alors qu'un pointeur ....
 

Code :
  1. int *a = malloc(...)
  2. free(a);
  3. //ici tu n'as aucun moyen de savoir que a n'est plus un pointeur valide




Bah faut faire marcher son cerveau 30 secondes...[:skeye]
Si tu n'es pas capable de te rendre compte si tu as fini ou non d'utiliser tes données tout seul, forcément tu vas être emmerdé!

Code :
  1. obj *a = new obj();
  2. obj &b = a;
  3. delete a;
  4. //on est pas dans le meme cas là pour b?


Message édité par skeye le 23-07-2003 à 14:53:10
n°465865
chrisbk
-
Posté le 23-07-2003 à 14:56:22  profilanswer
 

skeye a écrit :


Bah faut faire marcher son cerveau 30 secondes...[:skeye]
Si tu n'es pas capable de te rendre compte si tu as fini ou non d'utiliser tes données tout seul, forcément tu vas être emmerdé!


 
Si seulement c'etait toujours aussi simple....

n°465908
nraynaud
lol
Posté le 23-07-2003 à 15:38:39  profilanswer
 

LetoII a écrit :


Vive les smart pointer! :D

Tu sors, merci d'être passé ...


---------------
trainoo.com, c'est fini
n°465913
LetoII
Le dormeur doit se réveiller
Posté le 23-07-2003 à 15:42:52  profilanswer
 

nraynaud a écrit :

Tu sors, merci d'être passé ...


 
 :heink:


---------------
Le Tyran
n°465914
nraynaud
lol
Posté le 23-07-2003 à 15:43:09  profilanswer
 

skeye a écrit :


Bah faut faire marcher son cerveau 30 secondes...[:skeye]
Si tu n'es pas capable de te rendre compte si tu as fini ou non d'utiliser tes données tout seul, forcément tu vas être emmerdé!

Ou buter 25 personnes en mettant en rade le système d'ambulance de Londres ?


---------------
trainoo.com, c'est fini
n°465917
skeye
Posté le 23-07-2003 à 15:48:08  profilanswer
 

nraynaud a écrit :

Ou buter 25 personnes en mettant en rade le système d'ambulance de Londres ?


ah euh oui, éventuellement... :heink:

n°466129
schnapsman​n
Zaford Beeblefect
Posté le 23-07-2003 à 21:17:08  profilanswer
 

nraynaud a écrit :

Ou buter 25 personnes en mettant en rade le système d'ambulance de Londres ?


dans le même genre de troll, la licence java qui ne permet pas de faire des softs en rapport avec les centrales nucléaires  :lol:


Message édité par schnapsmann le 23-07-2003 à 21:17:22

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°466130
kadreg
profil: Utilisateur
Posté le 23-07-2003 à 21:22:21  profilanswer
 

SchnapsMann a écrit :


dans le même genre de troll, la licence java qui ne permet pas de faire des softs en rapport avec les centrales nucléaires  :lol:


 
On en est plus à java 1.1, tu sais, cette clause a disparu depuis.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°466133
schnapsman​n
Zaford Beeblefect
Posté le 23-07-2003 à 21:30:38  profilanswer
 

kadreg a écrit :


 
On en est plus à java 1.1, tu sais, cette clause a disparu depuis.


 
extrait de la license du jdk 1.4:

Citation :

2.  RESTRICTIONS.  Software is confidential and copyrighted.
Title to Software and all associated  intellectual  property
rights is retained  by Sun and/or its  licensors.  Except as
specifically  authorized in any Supplemental  License Terms,
you may not make  copies of  Software,  other  than a single
copy of Software for archival purposes.  Unless  enforcement
is  prohibited  by  applicable  law,  you  may  not  modify,
decompile,   or   reverse   engineer    Software.   Licensee
acknowledges  that  Licensed  Software  is not  designed  or
intended for use in the design,  construction,  operation or
maintenance of any nuclear facility.  Sun Microsystems, Inc.
disclaims  any express or implied  warranty  of fitness  for
such  uses.  No  right,  title  or  interest  in or  to  any
trademark,  service  mark, logo or trade  name of Sun or its
licensors is granted under this Agreement.


Message édité par schnapsmann le 23-07-2003 à 21:30:52

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°466137
chrisbk
-
Posté le 23-07-2003 à 21:38:04  profilanswer
 

SchnapsMann a écrit :


dans le même genre de troll, la licence java qui ne permet pas de faire des softs en rapport avec les centrales nucléaires  :lol:


 
 
bah, c koi le pb ? veulent pas prendre de risque

n°466138
kadreg
profil: Utilisateur
Posté le 23-07-2003 à 21:38:36  profilanswer
 


 
[:neowen]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8  9  10  11  12  13  14  15

Aller à :
Ajouter une réponse
 

Sujets relatifs
Gestion du id unique dans mysqlHardware, software et langages de programmation
[TOPIC UNIQUE] PHP-GTK Des applications graphiques en PHP[langages] et si
[java]Identifiant unique[CSS] CSS unique et liaison depuis toutes les pages d'un site
[VB6] K-Mail : Topic Uniquerécupérer un ID unique d'un ordi
[HTML - JS] cokkies pour visiteur unique[TOUS LANGAGES] - Conversion de couleurs YUV --> RGB
Plus de sujets relatifs à : [Topic unique] débats sur les langages


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)