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 :

Mise à jour de la FAQ C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 308
    Billets dans le blog
    15
    Par défaut Mise à jour de la FAQ C
    Mise à jour de la FAQ C
    Avec désormais une sélection des cent quatre-vingt-une (181) meilleures réponses à vos questions

    Chers membres du club,

    j'ai l'immense plaisir de vous annoncer la mise à jour de la FAQ C avec une sélection des cent quatre-vingt-une meilleures réponses à vos questions pour apprendre la programmation avec ce langage.

    Les nouveaux Q/R portent essentiellement sur les nouveautés de C11 par rapport à C99.



    Le chargement des données d'un fichier texte dans une structure



    Ce nombre est appelé à évoluer avec vos différentes contributions.

    Nous remercions LittleWhite, Matt_Houston et Winjerome pour leur engagement dans la rédaction et la relecture technique. Nos reconnaissances également à Claude LELOUP pour les corrections orthographiques.

    Vous pouvez aussi contacter l'équipe de rédaction
    .
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc..
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  2. #2
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Bonjour,
    concernant les «implémentations» complètes de C11 il faut citer les couples compilateurs/bibliothèque standard.
    Le couple gcc/musl est une implémentation de C11, au même titre que gcc/glibc (aux threads près si je ne me trompe pas).

    En tout cas bravo pour la mise à jour qui était nécessaire

  3. #3
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Bonsoir
    Dans la section FAQ C Comment charger les données d'un fichier texte dans une structure ? pourquoi utiliser un assert ?
    Enfin (rien ne vous oblige), mais personnellement, je trouve qu’il n’est pas correct d’utiliser assert dans le cas présent surtout si l’objectif du FAQ est de fournir une réponse correspondant la questions récurrentes posées.

    Je suis d’avis à connaître la raison d’un échec d’appel d’une fonction, mais de là a utilisé une fonction qui a pour rôle ou un des rôles la détection d’erreur de programmation lors de débogage et interrompre le programme en renvoyant une terminaison anormale du programme en question; est excessive.

    Je pense qu’il est préférable d’utiliser un retour d’erreur que assert. Je m’explique : le retour d’erreur met en évidence une mauvaise utilisation de la fonction à cause d’un paramètre erroné (Exemple à cause d’une ouverture de fichier qui a échoué, ou autres, etc..), ce qui permet alors de prendre les mesures nécessaires pour traiter l’erreur et terminer le programme proprement.
    "assert" est utilisé (dans mon cas) quand on se rend compte de l’instabilité du programme ou lorsque l’on fait du débogage en clair "assert" doit être utilisé que pour des circonstances ne devant jamais ce produire durant l’exécution normale d’un programme c’est un outil de débogage et non une méthode, routine ou fonction de sortie d’erreur de plus la gestion d’erreur doivent impérativement être faites uniquement par le programme Dans l’exemple fournir il ne s’agit strictement pas d’un bogue..
    Admettant que l’on compile avec -DNDEBUG pensez-vous que le programme final soit correct (et portable) ?.

    Ceci dit la mise à jour de la FAQ était essentielle
    à bientôt

  4. #4
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    @sambia39: tout à fait. assert = à utiliser uniquement lors du développement pour traquer les erreurs d'utilisations de l'API par exemple, à ne jamais utiliser en version release pour traquer les erreurs runtime.
    Un exemple plus correct remplacera l'assertion
    par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (f==NULL) {
      perror("fopen");
      exit(EXIT_FAILURE);
    }

    Comme on est en C11 on peut aussi utiliser les designated init :

    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_capteur c = { 0, "", 0.0f };
    on pourra préférer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_capteur c = { .id=0, .nom="", .valeur=0.0f };
    Dans compte = fscanf(f, "%d-%[^:s]:%f\n", &(c.id), c.nom, &(c.valeur)); le parenthésage n'est pas nécessaire la priorité de l'opérateur . étant supérieure à celle de l'opérateur & unaire. Mais bon ce n'est qu'un détail.

  5. #5
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    @picodev: Proposition d'exemple plus correct est correcte
    à bientôt

  6. #6
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Effectivement l'assert ne devrait pas être utilisé pour traiter un échec de fopen, bien vu sambia.

    Je ne suis pas totalement d'accord - c'est mineur, mais la FAQ C est précisément l'endroit pour chipoter ! - avec la solution de remplacement proposée par picodev :

    Citation Envoyé par picodev Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (f==NULL) {
      perror("fopen");
      exit(EXIT_FAILURE);
    }
    Ce qui me chiffonne c'est l'usage d'exit : il n'y a pas de raison de « paniquer » ici, de plus nous sommes dans main où l'on peut lui préférer un simple et élégant return. On voit déjà cet appel utilisé à tort et à travers dans les programmes de débutants, autant ne pas encourager cette pratique.


    Citation Envoyé par picodev Voir le message
    Comme on est en C11 on peut aussi utiliser les designated init :

    au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_capteur c = { 0, "", 0.0f };
    on pourra préférer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t_capteur c = { .id=0, .nom="", .valeur=0.0f };
    Ça c'est plus une préférence personnelle mais je ne suis pas non plus d'avis d'user et abuser de cette syntaxe, certes souvent pratique mais inutilement grevante lorsqu'il n'y a pas d'ambiguïté comme ici.

  7. #7
    Membre Expert
    Homme Profil pro
    sans emploi
    Inscrit en
    Janvier 2014
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : sans emploi
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 539
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Ce qui me chiffonne c'est l'usage d'exit : il n'y a pas de raison de « paniquer » ici, de plus nous sommes dans main où l'on peut lui préférer un simple et élégant return. On voit déjà cet appel utilisé à tort et à travers dans les programmes de débutants, autant ne pas encourager cette pratique.
    ...
    Oui c'est vrai ... un if else c'est mieux. L'important étant sans doute l'utilisation de perror.

    Ça c'est plus une préférence personnelle mais je ne suis pas non plus d'avis d'user et abuser de cette syntaxe, certes souvent pratique mais inutilement grevante lorsqu'il n'y a pas d'ambiguïté comme ici.
    C'est effectivement surtout utile dans la phase de développement où la composition de structures peut être modifiée, cela permet entre autre d'avoir des warnings pour des structures non complètement initialisée, et d'être certain que «la bonne partie» sera initialisée. Cela permet d'augmenter la lisibilité aussi dans certains cas : un truc = {20,1000,0}; est moins clair qu'un truc = { .temperature=20, .pression=1000, .echantillon=0}; ; pas la peine de retourner voir la définition pour savoir quoi correspond à quoi.
    C'est vrai que c'est verbeux pour un programme de 15 lignes, mais dès qu'on doit chercher loin pour avoir la définition c'est mieux.

  8. #8
    Membre très actif
    Avatar de sambia39
    Homme Profil pro
    No Comment
    Inscrit en
    Mai 2010
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : No Comment
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2010
    Messages : 548
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Ce qui me chiffonne c'est l'usage d'exit : il n'y a pas de raison de « paniquer » ici, de plus nous sommes dans main où l'on peut lui préférer un simple et élégant return. On voit déjà cet appel utilisé à tort et à travers dans les programmes de débutants, autant ne pas encourager cette pratique.
    Disant que le choix entre return et exit est plutôt d’ordre préférentiel, mais je l’admets tout de même qu’on l’utilise à tort. Personnellement, j’utilise la fonction exit uniquement dans le cas où j’ai une erreur irrécupérable qui s’est produite où quand un return de l’information de cette erreur excède plus de 3 niveaux de profondeur de fonction.

    à bientôt

Discussions similaires

  1. Mise à jour de la FAQ
    Par vermine dans le forum ASP
    Réponses: 2
    Dernier message: 09/11/2006, 14h26

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