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 :

macro pour un malloc


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut macro pour un malloc
    Bonjour, à chaque fois que l'on fait un malloc, il faut immédiatement faire un assert(pointeur!=NULL); Peut-on faire une macro du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MALLOCN(p,N) assert(N>0); type * p=malloc(N*sizeof(*p)); assert(p!=NULL)
    en gros c'est une idée, mais comment définir le type ?

    Merci.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: macro pour un malloc
    Citation Envoyé par salseropom
    Bonjour, à chaque fois que l'on fait un malloc, il faut immédiatement faire un assert(pointeur!=NULL); Peut-on faire une macro du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MALLOCN(p,N) assert(N>0); type * p=malloc(N*sizeof(*p)); assert(p!=NULL)
    en gros c'est une idée, mais comment définir le type ?

    Merci.
    Ce n'est pas une bonne idée, parce que un malloc() qui échoue n'est pas forcément une erreur grave. L'idée des concepteurs du C est de laisser l'application prendre les bonnes décisions.

    Un exemple d'usage massif de malloc() pour construire des objets plus ou moins complexes est donné ici:

    http://emmanuel-delahaye.developpez.com/clib.htm

    En aucun cas, assert() n'est utilisé pour quitter brutalement (sauf dans les endroits où la condition ne doit pas se produire, et serait le résultat d'un mauvais codage, notamment dans les fonctions privées dont l'appelant est parfaitement connu, donc hors 'callbacks).
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je trouve que cela serait une mauvaise idée. Premièrement, faire trop de macro est une façon de masquer la programmation sous-jacente et cela aura une tendance à faire oublier ce qu'il faut faire derrière un malloc.

    Deuxièmement, lorsqu'il faut lire du code, il faut pouvoir le lire comme si c'est un livre, dès l'utilisation de macro avec paramètres (si cela est mal fait), le code devient illisible...

    Finalement, cela n'ajoute pas grand chose et le temps d'écrire

    "type *p = malloc(N*sizeof(*p)); assert(p!=NULL);" m'a pris moins de 20 secondes...

    Mais bon, en supposant que mes mises en garde (fondées ou non) seront suivies, tu peux très bien passés le type en paramètre à la macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define MYMALLOC(type,var,size) type* var = malloc((sizeof *var)*size);\
                                    assert (var!=NULL);
    en l'utilsant comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MYMALLOC(int,tableau,n);
    Remarque que le dernier ";" de la macro n'est pas nécessaire mais je préfère le mettre...

    Jc

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 886
    Points
    886
    Par défaut
    bon ben j'oublie mon idée alors. Merci de vos remarques.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Je rejoins les les commentaires de mes prédécesseurs. Récemment, j'ai commencé à étudier les sources d'un logiciel libre pour en étudier la structure, la conception, etc. Perso, je trouve que moins on utilise de directives pré-processeur, plus le code est lisible. Dans ton cas particulier, je ne crois pas qu'il y a avantage déterminant à écrire une macro.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MACRO pour malloc et effets de bord
    Par ncheboi dans le forum Débuter
    Réponses: 6
    Dernier message: 02/09/2010, 12h42
  2. [VBA-E] Macro pour convertir un fichier texte en excel
    Par Nicolas67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2006, 14h47
  3. Complexité d'une macro pour Excel
    Par MatMeuh dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 14/04/2006, 11h23
  4. macro pour splashscreen
    Par stoads dans le forum IHM
    Réponses: 20
    Dernier message: 26/11/2005, 12h33
  5. [VBA-E] [help]macro pour dupliquer une feuille (en valeur)
    Par minikisskool dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 07/11/2005, 19h24

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