Bonjour,
existe t'il ,en C, des outils qui fournissent
1- des exception?
j'ai trouvé ça pour l'instant http://www.on-time.com/ddj0011.htm
2- une gestion de la mémoire en RAII ?
la j'ai rien trouvé en C
merci.
Version imprimable
Bonjour,
existe t'il ,en C, des outils qui fournissent
1- des exception?
j'ai trouvé ça pour l'instant http://www.on-time.com/ddj0011.htm
2- une gestion de la mémoire en RAII ?
la j'ai rien trouvé en C
merci.
Tu peux aussi voir ce qu'il y a dans les differents framework de Laurent Deniau (http://ldeniau.web.cern.ch/ldeniau/html/oopc.html).
merci je vais regarder
Bon, est-ce qu'il est vraiment judicieux d'utiliser des frameworks genre de l'OO ou les exceptions en C là ?
Parceque franchement le C c'est le C, et on n'a pas, à ma connaissance, inventé le C++ pour les poules du voisin! si?
L'utilisation d'un framework OO en C plutôt que C++ peut se justifier à mon avis par les raisons suivantes:
- Aucun compilateur n'est disponible pour la plateforme cible (ou alors un tel compilateur est inaccessible pour des questions de coûts)
- C90 est probablement le langage le plus portable à l'heure actuelle.
- Le langage C possède une ABI bien définie, ce qui facilite la création de passerelles (bindings) entre une bibliothèque écrite en C ou en C OO et d'autres langages.
- Certains programmeurs utilisent le C tout simplement parce que c'est le langage qu'ils connaissent le mieux. Un framework OO leur permet alors de bénéficier des avantages que peut offrir la programmation orienté-objet, notamment au niveau de l'organisation du code.
L'inconvénient principal que je vois concernant l'utilisation d'un framework OO particulier est que les programmeurs participant au projet devront se former sur son utilisation. Il est en effet plus facile de recruter des programmeurs possédant de l'expérience en C++ que des programmeurs ayant déjà entendu parler de ooc-2.0 ou COS. GObject jouit d'une popularité plus évidente, notamment grâce aux projets GTK+ et GNOME, mais l'utilisation de ce framework est relativement complexe.
Thierry
Pour l'OO. Ben je voit pas quoi te repondre. Tu connait Glib? Gtk+? GTS?
C'est du C avec de l'OO ( ou j'ai peut être pas compris).
Thierry Chappuis as bien répondu sur ce point...
Sinon, sait tu ce qu'est le RAII ?
Développant en C++, je vais bientôt aller sur un projet en C-objet et C++.
Je cherche donc quelques equivalence
Je ne connais pas de moyen d'implanter RAII (Resource Acquisition Is Initialization) en C. Pour ce faire, il faudrait qu'il existe un moyen d'appeler automatiquement le destructeur d'un objet à la sortie du bloc dans lequel il a été définit. En C, l'appel d'un destructeur ne peut se faire (à ma connaissance) que de manière explicite.
Thierry
J'ai récemment posté un monstre à base de fonctions et macros sur ce thème. Par contre, j'ai la flemme de chercher et il y avait quelques bugs (notamment, on ne pouvait pas utiliser "return" pour retourner une valeur)...
Tu parles de ce post? http://www.developpez.net/forums/sho...98&postcount=6. Je vais regarder ça de plus près.
Thierry
Oui.
Magnifique, non? :aie:
Il faudra que je pense à poster la dernière version, mais en .zip cette fois...
Bonjour,
juste deux question :
- La partie C++ est uniquement pour ne pas réimplementer la pile?
- pourquoi "Thread-local data structure" ?
merciCode:
1
2
3
4
5 //Thread-local data structure. struct threadFrameMemory { struct frame * pCurrentTopFrame; };
Bonjour,
- Pour être précis: Chaque structure "frame" peut contenir une liste de couples (pointeur de fonction, pointeur vers l'objet à détruire). Les fonctions sont appelées en ordre inverse de leur ajout lors de la destruction de la "frame", donc cette liste est une pile. Et comme je n'avais pas de fonctions "liste" ou "pile" en C sous la main, j'ai décidé d'utiliser une classe standard C++ pour ça.
- Là, il y a deux problèmes liés:
- J'ai besoin d'une variable globale pour ne pas avoir à passer systématiquement un pointeur supplémentaire aux fonctions
- Une variable globale, ça marche bien en mono-thread, mais pas en multithread.
Donc, j'utilise du Thread-Local Storage (TLS) : Chaque thread possède sa propre variable "globale". Mais si tu fais un simple programme monothread, tu peux remplaçer cela par une simple variable globale...
Donc, mon code est à la fois réentrant et thread-safe: Réentrant parce que la variable globale sert pour une pile, thread-safe parce que chaque variable n'est vue que par un thread et un seul...
Ok merci.
Sympa ton code...
pour ceux que cela interesse.
j'ai trouvé ca
http://c.developpez.com/sources/?page=XII#MEMOIRE_cmm
Attention, gestion de mémoire et RAII sont deux choses distinctes, hein...
La RAII s'applique à toute ressource: Mémore, fichier ouvert, verrou, ou même indentation d'un fichier de log.
RAII, c'est tout ce qu'on peut faire automatiquement avec le destructeur d'une classe C++.
La gestion de mémoire, c'est la gestion de mémoire. Tu peux y faire des objets à comptage de références, un système de ramasse-miettes, un traceur d'allocations et de fuites de mémoire, etc.
Mon code, il est fait pour la RAII, pas en particulier pour la gestion de mémoire.
ah ok.
merci