IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Bibliothèques et outils pratiques


Sujet :

C

  1. #1
    NSV
    NSV est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 17
    Par défaut Bibliothèques et outils pratiques
    Bonjour,

    Après avoir fait pendant quelques années du C, j'ai décidé (pour le sport) de m'y remettre.
    Grâce aux conseils (sur le forum) d'utiliser Wascana, j'ai très facilement peut reconstruire un environ viable pour mon jeu d'échec (jeu en C fait pendant mes années d'études). Il a réussi sans que je configure rien compiler, exécuter, débugger mon programme. Je suis assez satisfait étant donné que ça m'a pris que 5 min (mes précédentes tentatives n'avaient jamais été bien glorieuses et j'avais abandonné à chaque au vu de l'ampleur du travail pour mettre en place un environnement utilisable et pratique).

    Maintenant, suite à mes expériences dans le monde de l'objet, j'aimerais appliquer mon expériences sur ce "nouveau" projet.
    Je cherche donc un outils de tests unitaires à intégrer à Eclipse. J'ai trouvé Cxxtest (et les autres sur le forum) mais il semble qu'ils sont orienté c++ et non c (d'ailleurs, il serait tant que les gens cesse de dire C/C++, ce que developpez.com a compris !). Donc y'a t il des personnes ayant fait du tests unitaires en C sous Eclipse (voir en ligne de commande) ?

    De plus, j'avais lu je sais plus où, qu'il y a des bibliothèques permettant une gestion plus aisé des listes, des exceptions, des booléens, des strings... en C
    Où peut on trouver ce genre de bibliothèques ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par NSV Voir le message
    De plus, j'avais lu je sais plus où, qu'il y a des bibliothèques permettant une gestion plus aisé des listes, des exceptions, des booléens, des strings... en C
    Où peut on trouver ce genre de bibliothèques ?
    glib. Mais vu ce que tu demandes, pourquoi tu ne le fais pas en C++ ?

    Donc y'a t il des personnes ayant fait du tests unitaires en C
    Oui. CUnit, par exemple...

  3. #3
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Mais vu ce que tu demandes, pourquoi tu ne le fais pas en C++ ?
    N'avons nous pas déjà tout ça en C?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    N'avons nous pas déjà tout ça en C?
    Alors, je reprends :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ....................................
    :            : C             : C++ :
    :............:...............:.....:
    : listes     : non           : oui :
    : exceptions : non           : oui :
    : booléens   : oui[C99]      : oui :
    : strings    : rudimentaire  : oui :
    :............:...............:.....:

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Alors, je reprends :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ....................................
    :            : C             : C++ :
    :............:...............:.....:
    : listes     : non           : oui :
    : exceptions : non           : oui :
    : booléens   : oui[C99]      : oui :
    : strings    : rudimentaire  : oui :
    :............:...............:.....:
    De base bien sûr, mais toi le premier comme tout ceux qui fréquente souvent le forum, avons tous sous la main nos propres bibliothèques qui implémentent ces fonctionnalités.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Enfin, pour les exceptions, c'est pas si évident...
    Même dans mon programme d'essai sur les destructeurs en C, je n'ai pas encore mis de système d'exceptions...

    PS: Je sais que ce programme est inutilement compliqué pour la gestion de sa liste. Je prévois de corriger ça, mais j'avais la flemme.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    De base bien sûr, mais toi le premier comme tout ceux qui fréquente souvent le forum, avons tous sous la main nos propres bibliothèques qui implémentent ces fonctionnalités.
    Oui, mais il a fallu les coder soi-même, ce qui est satisfaisant, mais pas très productif...

    Quand aux exceptions ...

  8. #8
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Enfin, pour les exceptions, c'est pas si évident...
    Même dans mon programme d'essai sur les destructeurs en C, je n'ai pas encore mis de système d'exceptions...

    PS: Je sais que ce programme est inutilement compliqué pour la gestion de sa liste. Je prévois de corriger ça, mais j'avais la flemme.
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Oui, mais il a fallu les coder soi-même, ce qui est satisfaisant, mais pas très productif...

    Quand aux exceptions ...
    Pour ce qui est des exceptions, je maintiens personnellement la bibliothèque de john viega (libxxl), si ça vous intéresse, d'autant qu'elle intègre un système de destructeurs (ça c'est pour toi Médinoc), que dans sa version mono thread, elle est compatible C89 (ça c'est pour toi Emmanuel), dans sa version multi thread, elle est compatible POSIX et Windows.

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Ça me rappelle qu'en parlant de Windows, je n'aurais pas dû utiliser du Thread-Local Storage ici, mais du Fiber-Local storage (quand ça existe). Le problème, c'est que le FLS n'existe pas sur toutes les versions de WinNT (la CRT de Microsoft a du code pour détecter ça et choisir entre TLS et FLS pour ses variables non-réentrantes et ses exceptions Win32)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ça me rappelle qu'en parlant de Windows, je n'aurais pas dû utiliser du Thread-Local Storage ici, mais du Fiber-Local storage (quand ça existe). Le problème, c'est que le FLS n'existe pas sur toutes les versions de WinNT (la CRT de Microsoft a du code pour détecter ça et choisir entre TLS et FLS pour ses variables non-réentrantes et ses exceptions Win32)
    Aurais tu ce fameux code pour détecter si le fiber local storage est dispo ou pas?
    n'y aurait il pas un define bien propre pour ça?

  11. #11
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    ça commence mal : http://http://msdn.microsoft.com/en-...64(VS.85).aspx
    Requires Windows Vista.

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    La CRT fait un bète GetProcAddress() et enregistre l'adresse dans une variable globale (je crois qu'elle fait ça à l'initialisation, dans son équivalent du DllMain, avant qu'il soit possible de lancer de nouveaux threads). Enfin, je n'ai pas le code sous les yeux, je parle de mémoire là.
    En plus, j'ignore s'il est très légal de poster du code de la CRT dans le forum (où des gens sans license de Visual peuvent le lire)

    Vous remarquerez qu'il n'est pas "safe" d'utiliser les exceptions dans des fibres avant Windows Vista ou Windows Server 2003, car dans les versions précédentes les fibres existent mais pas le FLS.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Pour ce qui de ma bibliothèque, je suis à l'abri, l'ai seulement précisé "thread-safe" et pas "fiber-safe". Ils auraient au moins pu corrigé ça avec le SP3...

  14. #14
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Après recherche, le pointeur de fonction est bien stocké dans une variable globale, par la fonction _mtinit().
    Cette fonction est bien appelée au démarrage avant que la création d'un autre thread soit possible, du moins en mode DLL.

    (en mode lib statique, il est peut-être possible qu'un autre thread soit lancé depuis une DLL avant que le _mainCRTStartup() de l'exe fasse l'initialisation. Mais cela ne devrait pas poser de problème tant que ledit thread n'appelle aucune fonction de l'EXE, et je ne vois pas comment il pourrait le faire...)

    PS: Ne t'inquiète pas, je me préoccupe généralement assez peu de la fiber-safety de mes fonctions.
    Ce qui est à retenir par contre, c'est qu'il faut aussi éviter d'utiliser des fonctions non-réentrantes de la CRT (comme strtok()) dans des fibres, car elles auront un comportement différent selon la version de Windows: La variable "cachée" sera ou non partagée entre les différentes fibres s'exécutant sur un même thread.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  15. #15
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    y a t'il un équivalent de strtok_r() sous Windows?

  16. #16
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Depuis Visual 2005, il y a strtok_s().

    Il y a également qsort_s() qui peut être vachement sympa si tu veux trier un tableau d'indices de tableau...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2010, 17h04
  2. bibliothèques et outils pour plus d'efficacité
    Par sebastator dans le forum Fortran
    Réponses: 1
    Dernier message: 09/07/2009, 23h47
  3. outil pratique code source C
    Par oneonly dans le forum Choisir un environnement de développement
    Réponses: 3
    Dernier message: 17/06/2008, 12h32
  4. Bibliothèque d'outils en ADA 95
    Par berncs dans le forum Ada
    Réponses: 2
    Dernier message: 25/05/2007, 08h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo