France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
22 343 membres enregistrés - 1 872 923 posts - 95 151 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Sujets divers
                [C] visibilite des declarations
31 connectés(record : 207 le 05 juin 2007 - 05 h 23)

Vous devez vous connecter pour répondre au topic.
[C] visibilite des declarations

degourth
YO | DeGourth

Messages : 685
Inscrit le 01/04/03
Ville : Gex
Non connecté
  Posté le 12 octobre 2004 - 15 h 14 m 56 s

Salut, voilla apres kk années de java je m essaie au c, en tentant de programmer objet. j ai une petite question sur la facon de faire:

je me propose de rendre visible des pointeurs d'objets (structure), pour initialiser ces pointeur il faut que je declare une variable du type de la strucuture et que je l initialise. d ou ma question : si je declare cette variable dans le corps d une procedure quelle vas etre sa durée de vie ? faut il que je declare la variable en static ds le .c et que je l iniitialise de la procedure ? (si oui y a t il un convention pour eviter l ambiguitée de nommage variable/pointeur ?)

thx :)

deg:)



Do not meddle in the affairs of geeks, for they are subtle and quick to anger.

Erel69
206
(¯`·.__[T3aM.L1b3rTe©]__.·´¯)

Messages : 19 449
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 12 octobre 2004 - 15 h 17 m 43 s
C'est du C++ si c'est de l'OrientéObjet non ?



Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...

degourth
YO | DeGourth

Messages : 685
Inscrit le 01/04/03
Ville : Gex
Non connecté
  Posté le 12 octobre 2004 - 15 h 19 m 21 s
nop c bien du c :)
on a pas l heritage mais ca empeche pas de programmer orienté objet :)



Do not meddle in the affairs of geeks, for they are subtle and quick to anger.

degourth
YO | DeGourth

Messages : 685
Inscrit le 01/04/03
Ville : Gex
Non connecté
  Posté le 12 octobre 2004 - 15 h 36 m 40 s
bernie, AU SECOURS :)



Do not meddle in the affairs of geeks, for they are subtle and quick to anger.

Erel69
206
(¯`·.__[T3aM.L1b3rTe©]__.·´¯)

Messages : 19 449
Inscrit le 07/11/01
Ville : Lyon
Non connecté
  Posté le 12 octobre 2004 - 15 h 38 m 21 s


Le 12 octobre 2004 - 15 h 14, degourth a écrit :
si je declare cette variable dans le corps d une procedure quelle vas etre sa durée de vie


Ben si c'est une variable locale la durée de vie c'est celle de la fonction


Pour la convention, généralement on met un "p"
Exemple, un pointeur pointant sur toto pourra être appelé ptoto



Obscurité au-delà du crépuscule, pourpre au-delà du sang qui coule, enfoui dans le flot du temps, en ton haut nom, je jure fidélité à l'obscurité. Que les fous qui se dressent devant nous soient détruits, par le pouvoir que toi et moi possédons...

degourth
YO | DeGourth

Messages : 685
Inscrit le 01/04/03
Ville : Gex
Non connecté
  Posté le 12 octobre 2004 - 15 h 45 m 24 s


Le 12 octobre 2004 - 15 h 38, Erel69 a écrit :
Ben si c'est une variable locale la durée de vie c'est celle de la fonction


oki :) ca veut dire que si je doit construire une structure a partir d autre strucutures, toutes doivent etre declareées hors fonction, et initialisé a l interieur de la fonction.



Le 12 octobre 2004 - 15 h 38, Erel69 a écrit :
Pour la convention, généralement on met un "p"
Exemple, un pointeur pointant sur toto pourra être appelé ptoto


oki, thx :jap:



Do not meddle in the affairs of geeks, for they are subtle and quick to anger.

bernie38
Waldorf (le pote à Statler)

Messages : 11 393
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 12 octobre 2004 - 16 h 20 m 28 s


Le 12 octobre 2004 - 15 h 36, degourth a écrit :
bernie, AU SECOURS :)

Tadaaaaaaaaaa me voila !
Comme l'a dit Erel, c'est la fonction. Mais j'ajouterais que la portée est limitée au bloc comme dans :
for (int i = 0 ; i < MAX ; i++)
{
/* quelques instructions */
}
/* ici, le "i" du for n'existe plus...

Une solution pas très propre est de déclarer des variables globales (qui en java deviennent des variables de classe. Tu connais un peu java, il me semble ?)

Sinon, la bible du C : Kernighan and Ritchie. Y'a pas mieux pour s'en sortir.

P.S. : tu es vache d'être parti, parce que j'ai eu des soucis en XSLT, si tu avais été là j'aurais bien économisé quelques jours !

EDIT : tu es gonflé de faire de l'objet en C ! va falloir retrousser les manches ! Y'a d'autres langages un peu plus faits pour ça je crois savoir :D


Message édité 1 fois, la dernière par bernie38 le 12 octobre 2004 - 16 h 24.

La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


gege38
Modérateur
Chief of the
(¯`·.__[T3aM.BouL3T©]__.·´¯)
Potatoe Reloaded

Messages : 14 079
Inscrit le 05/02/03
Ville : Domène
Non connecté
  Posté le 12 octobre 2004 - 19 h 56 m 40 s


Le 12 octobre 2004 - 16 h 20, bernie38 a écrit :


Le 12 octobre 2004 - 15 h 36, degourth a écrit :
bernie, AU SECOURS :)

Tadaaaaaaaaaa me voila !
Comme l'a dit Erel, c'est la fonction. Mais j'ajouterais que la portée est limitée au bloc comme dans :
for (int i = 0 ; i < MAX ; i++)
{
/* quelques instructions */
}
/* ici, le "i" du for n'existe plus...

Une solution pas très propre est de déclarer des variables globales (qui en java deviennent des variables de classe. Tu connais un peu java, il me semble ?)


Tout à fait d'accord Hector :D C'est très loin d'etre propre... La meilleure solution à mon goût est le passage de pointeurs entre fonctions...



Sinon, la bible du C : Kernighan and Ritchie. Y'a pas mieux pour s'en sortir.

Idem...

Au pire, je dois pouvoir retrouver la source informatique de mon poly de C (que tout bon étudiant a :D)



P.S. : tu es vache d'être parti, parce que j'ai eu des soucis en XSLT, si tu avais été là j'aurais bien économisé quelques jours !


Toutes mes condoléances pour le XSLT :jap: :P



EDIT : tu es gonflé de faire de l'objet en C ! va falloir retrousser les manches ! Y'a d'autres langages un peu plus faits pour ça je crois savoir :D
C'est clair que tu peux plutot aller voir ailleurs... Du C++ par exemple...



" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld


CountZero
Et oui c'est moi...

Messages : 312
Inscrit le 11/09/03
Ville : Grenoble
Non connecté
  Posté le 13 octobre 2004 - 10 h 53 m 32 s


EDIT : tu es gonflé de faire de l'objet en C ! va falloir retrousser les manches ! Y'a d'autres langages un peu plus faits pour ça je crois savoir :D


Perso je trouve vraiment inutile essayer de faire de OOP avec du C, il faut vraiement tordre le langage pour qu'il accepte ca....

CountZero



-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GE/CS d- S:->: s- C++++(++) US++ UD?>++ P L+ E? W++ N++ o? K+ w- O?
M- V PS+ !PE Y+ PGP? t+ 5? X++ R+ !tv b+++ DI+++++ D++ G e* h++ r% y**
------END GEEK CODE BLOCK------


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 13 octobre 2004 - 11 h 35 m 06 s

Bernie> variables globales C => variables de classe (??) en Java ?




Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


bernie38
Waldorf (le pote à Statler)

Messages : 11 393
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 13 octobre 2004 - 13 h 24 m 11 s


Le 13 octobre 2004 - 11 h 35, iraysyvalo a écrit :

Bernie> variables globales C => variables de classe (??) en Java ?

bon, c'est un raccourci. En fait, je voulais dire qu'une variable globale en C est "visible" par toutes les fonctions du source comme une variable de classe Java est "visible" par toutes les méthodes de cette classe. Je parle bien de la classe, et pas de l'ensemble des classes composant un jar (notion de privée/publique, getters et setters, etc...)

Ce qui ne change rien au problème, fondamentalement : j'aime pas du tout les globales en C, et en Java j'évite au max les variables de classe pour soi-disant "alléger" la prog des méthodes les utilisant, parce que ça devient vite le bordel (comme en C d'ailleurs) ; je préfère de loin les getters/setters, quitte à ce qu'ils soient propres à la classe (private), même si ça semble alourdir un peu la prog.

J'ai bon, là ?



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


iraysyvalo
-

Messages : 9 647
Inscrit le 19/11/02
Ville : Lyon
Non connecté
  Posté le 13 octobre 2004 - 13 h 37 m 26 s
En fait, qu'appelles-tu variable de classe ??

Oui, il faut eviter les variables globales ... mais le probleme plus fondamental est que C n'est pas fait pour l'OO.



HS Java :
Comme tu fais la, je trouve que ce n'est pas optimal .. J'utilise plutot des methodes d'acces pour exposer une interface. Par contre en interne, etant l'implementeur de cette interface, ce n'est pas top ...


Message édité 1 fois, la dernière par iraysyvalo le 13 octobre 2004 - 13 h 38.


Pour un ban rapide et garanti sur ce forum, argumentez vos posts, dites simplement la verite, parlez de la realite et les leche-culs d'un cote et les maniaques du ban de l'autre se feront un plaisir de vous envoyer au purgatoire aussi sec.


bernie38
Waldorf (le pote à Statler)

Messages : 11 393
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 13 octobre 2004 - 13 h 56 m 23 s


Le 13 octobre 2004 - 13 h 37, iraysyvalo a écrit :
En fait, qu'appelles-tu variable de classe ??

Oui, il faut eviter les variables globales ... mais le probleme plus fondamental est que C n'est pas fait pour l'OO.



HS Java :
Comme tu fais la, je trouve que ce n'est pas optimal .. J'utilise plutot des methodes d'acces pour exposer une interface. Par contre en interne, etant l'implementeur de cette interface, ce n'est pas top ...

Pour en revenir au sujet, je suis tout à fait d'accord, faire de l'OO en C, ça demande des efforts disproportionnés par rapport au résultat. Et je me demande même si en terme de performance...

HS Java :
ben pour moi une variable de classe c'est ça par exemple :


public class MaClasse {
private static ArrayList arr = null;
...
}

Ce cas, je l'accepte si arr doit être lu ou écrit depuis l'extérieur de MaClasse, et dans ce cas j'ai deux méthodes publiques : getArr() et setArr()
Dans certains cas, j'aurais même tendance à abuser et à utiliser aussi dans MaClasse de getArr() et setArr() mais là, j'avoue, c'est de la tetrapilocotomie (en langage vulgaire : art de couper les cheveux en quatre :lol:)

Même chose pour les variables d'instance (donc non static)


Message édité 2 fois, la dernière par bernie38 le 13 octobre 2004 - 13 h 57.

La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


degourth
YO | DeGourth

Messages : 685
Inscrit le 01/04/03
Ville : Gex
Non connecté
  Posté le 13 octobre 2004 - 17 h 08 m 51 s
hop les news :)

alors pour etre plus claire j explique un peu mon contexte j essairai de revenir sur l objet en c un peu plus bas :)


en fait je code une factory, cette classe vas renvoyer des pointeur sur des structures, les structures sont donc declarées en variables global dans mon .c

chaque structure, represente les attributs d' UN objet,
maitenant certain de ses attributs sont complex (c a dire qu il sont definit comme une sous structure)

comme je code une factory, je doit initializer les differents attributs, pour les attributs simple bah c direct, pour les attributs complexe j utilise des methodes, ces methodes declarent en locale un variable du type de la strucuture de l attribut complexe, l initialise et le copie dans la structure globale.

ca c etait avant. (pourkoi ? maitenant on rempli directement la structure globale que l on recoit en parametre, ca evite de reallouer une strucuture localement)(on passe un aprametre, parcequ on a plusieurs objet a initialiser avec chacune des methodes)

voilla ma question etait pas tres claire, mais vos reponces et les collgues ici m on remis sur le droit chemin de l allocation memoire :)

@bernie : effectivement je connais un peu dautre langages plus évolués ;) mais pour le temps réel ils sont pas encore au point :) (la prochaine fois que tu paiera un stationnement avec un billet (genre a phillippeville), bah tu pourras imaginer mon code tourner dans l appareil :)


maitenant en ce qui concerne l objet en c, il suffit de se poser la question c quoi l objet ? (avec un grand O, pas un objet en particulier) ma definition : c de la statique (ie des attributs), de la dynamique (les methodes) et la notion de collaboration/visibilitée.

(si kk un a une meilleur definition, je suis pret a en debattre volontier)

tout ces conceptes se trouvent en c, donc on peut programmer objet en c cqfd ;)

maitenant je suis bien d accord, d autre langages plus evolués permettent de programmer plus facilement en objet, en apportant des mecanism adaptés (heritage par exemple, l encapsulation a la java aussi...)

dans mon cas : on vise le temps reel sur des cible 8 bits, 512byte de rame, c inconcevable de programmer en autre chose qu en c (ah si en assembleur mais la suis plus tres fan), on met en ouvre un processus de devellopement basé sur usdp (Unified Process) ce processus est objet, ca serait vraiment dommage de faire une analyse / conception en objet et de tout bazarder pour se mettre a coder comme des sales :)


@bernie2 : hesiter pas a mailer si t as un pb d xsl ;)(je suis pas tous les jours sur le forum)

@all : nerf les clavier qwertz.



Do not meddle in the affairs of geeks, for they are subtle and quick to anger.

degourth
YO | DeGourth

Messages : 685
Inscrit le 01/04/03
Ville : Gex
Non connecté
  Posté le 13 octobre 2004 - 17 h 14 m 13 s
Le 13 octobre 2004 - 13 h 56, bernie38 a écrit :



HS Java :
ben pour moi une variable de classe c'est ça par exemple :

public class MaClasse {
private static ArrayList arr = null;
...
}

Ce cas, je l'accepte si arr doit être lu ou écrit depuis l'extérieur de MaClasse, et dans ce cas j'ai deux méthodes publiques : getArr() et setArr()
Dans certains cas, j'aurais même tendance à abuser et à utiliser aussi dans MaClasse de getArr() et setArr() mais là, j'avoue, c'est de la tetrapilocotomie (en langage vulgaire : art de couper les cheveux en quatre :lol:)



pas du tout, bien au contraire :)
tu fait bien continue :)
il faut voire les accesseur/mutateurs(ie les set / les get) comme des moyens de faire du control dacces, certes, mais aussi comme un filtre sur les donnés,

par exemple :

public setName(String name){
this.name = name.toLowerString();
}


du coup ton constructeur de classe prends du sens

private String name;
public Toto(String name){
this.setName(name);
}


Message édité 1 fois, la dernière par degourth le 13 octobre 2004 - 17 h 16.

Do not meddle in the affairs of geeks, for they are subtle and quick to anger.

bernie38
Waldorf (le pote à Statler)

Messages : 11 393
Inscrit le 28/08/03
Ville : Claix
Non connecté
  Posté le 13 octobre 2004 - 17 h 26 m 38 s
bon, ben c'est ça qu'je fais, un peu comme monsieur Jourdain faisait de la prose sans le savoir...

pour le XSL, j'ai fini par lui tordre le cou, ça marche. J'espère ne pas avoir à y revenir. C'était pour modifier les fichiers XML d'un document Open Office.



La Montagne n'est pas dangereuse : on ne peut qu'y perdre la vie, tandis qu'en ville on devient bête et méchant
Voltaire


Page genérée en 1.5035 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory