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 :

creer sa propre bibliotheque .h


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut creer sa propre bibliotheque .h
    bonjour

    comment creer une bibliotheque de fonctions pesonalisées pour l'appeler dans mon programme principale?

    merci.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    C'est un peu vague, du fait que nous ne savons pas quel est le système d'exploitation cible, ni si la bibliothèque est statique ou dynamique, ni quel sont les outils utilisés.

    D'une manière générale :

    Un fichier *.h (fichier d'en-tête) ne contient pas de code mais seulement les définitions des macros, constantes, structures "publiques" et les déclarations des fonctions et variables globales publiques.

    Pour créer une bibliothèque (library) statique ou dynamique, il faut un (ou plusieurs) fichier(s) .c [qui contiennent le code de la bibliothèque] et des fichier(s) d'en-tête(s).

    Ensuite on compile et on fait l'édition de lien en spécifiant bien que l'on souhaite créer une bibliothèque et quel est son type (statique ou dynamique).

    Dans la plupart des cas, le fichier .h nécessaire au code de la bibliothèque sera inclut directement avec un projet nécessitant la bibliothèque ainsi produite (pas besoin de réécrire un fichier .h pour "s'interfacer" avec la bibliothèque).

    J'espère que ca répond en partie à la question, mais plus de précisions seraient bienvenues.

  3. #3
    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 Re: creer sa propre bibliotheque .h
    Citation Envoyé par Amine_sas
    comment creer une bibliotheque de fonctions pesonalisées pour l'appeler dans mon programme principale?
    Déjà ton titre "creer sa propre bibliotheque .h" exprime une grande confusion...

    http://emmanuel-delahaye.developpez....m#bibliotheque

    Une fois la question du vocabulaire reglée, oui, il est possible de fabriquer sa propre bibliothèque de fonctions.

    Il y a des principes de conception à respecter (interface / implémentation),

    http://emmanuel-delahaye.developpez....ganiser_source
    http://emmanuel-delahaye.developpez.....htm#organiser

    et des outils qui permettent de fabriquer une bibliothèque.

    Les détails de ces outils dépendent de l'implémentation (le bon forum est alors "Outils pour C & C++ / EDI / Compilateurs / etc")

  4. #4
    Membre expérimenté Avatar de Amine_sas
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 245
    Par défaut
    je suis desolé pour "l'ambguité" de mon message.

    tt simplement je fait mes premiers pas en C et je souhaite creer un "Header File" et l'inclure dans mon programme principal pour faire appel à d'autres fonctions definies dans un autre programme C.

    systeme d'exploitation: Windows XP.
    compilateur: Borland C++ 5.5.

    Merci

  5. #5
    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 Amine_sas
    je souhaite creer un "Header File" et l'inclure dans mon programme principal pour faire appel à d'autres fonctions definies dans un autre programme C.
    Je t'ai donné des pistes. On attend ton code ...

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    je souhaite creer un "Header File" et l'inclure dans mon programme principal
    Le header est en dehors du prog principal.
    Dans ce dernier seul figure l'appel au header:


  7. #7
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Citation Envoyé par seriousme
    Le header est en dehors du prog principal.
    Dans ce dernier seul figure l'appel au header:

    Tu voulais surement écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "header.h"
    ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Just passing by
    On peut ecrire pour un header se trouvant de le repertoire où on compile si on specifie l'option "-I."

  9. #9
    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 Gruik
    Just passing by
    On peut ecrire pour un header se trouvant de le repertoire où on compile si on specifie l'option "-I."
    Pas portable et pratique douteuse. Il est d'usage que les headers standards et ceux du compilateur (extensions) utilisent les < >. Le " " sont réservés aux headers aopplicatifs.

    Pour les bibliothèques tierces, on trouve les deux pratiques.

  10. #10
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour tout le monde,

    Je me permets de continuer sur ce poste afin de ne pas faire de doublon.

    Je dois également réaliser un ptit prog où j'aimerais inclure mon propre header . J'ai donc regarder ce que Emmanuel avait écrit et j'ai adapté .

    Pourriez vous me dire si cela est bon dans un 1er temps (Je débute également en c)

    pile.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef H_PILE
    #define H_PILE
     
    PILE *creerPile();
    OBJ *sommet(PILE *p);
    bool empiler(OBJ *nouvObj, PILE *p);
    bool depiler (PILE* p);
     
    #endif /* guard */

    pile.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    /* ----------- pile.c ---------- */
     
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include "pile.h"
     
    #define BOOLEEN int
    #define VRAI 1
    #define FAUX 0
    #define NEW(x) (x*)malloc(sizeof(x))
     
    /*---------------------------------*/
    /* PILE dans structure récursive	*/
    /* Gestion dynamique de la mémoire	*/
    /*-------------------------------	*/
     
    typedef struct {
    	double valeur;
    	int code;
    }OBJ;
     
    typedef struct cel {
    	OBJ objet;
    	struct cel *lienprec;
    } CELLULE;
     
    typedef struct {
    	CELLULE *haut;
    } PILE;
     
    /*=====================================*/
    /* Outils internes (privés)	    */
    /*=====================================*/
     
    /*- TROUVER_PLACE ---------------------*/
    static CELLULE * _trouverPlace() {
    CELLULE *e;
    	e = NEW(CELLULE);
    	return (e);
    }
    /*- COPIER_OBJET -----------------------*/
    static void _copierObjet(OBJ *nouvObj, CELLULE *e) {
    	memcpy(e, nouvObj, sizeof(OBJ));
    }
     
    /* - PILE_VIDE----------------------------*/
    static BOOLEEN _pileVide(PILE *p) {
    	if (p->haut == NULL)
    		return (VRAI);
    	else
    		return (FAUX);
    }
     
     
    /*======================================*/
    /* Outils de Base			*/
    /*======================================*/
     
    /*- CREER_PILE ------------------------ */
    PILE * creerPile() {
    PILE * p;
    	p = NEW(PILE);
    	if (p == NULL) return (p);
    	p->haut = NULL;
    	return (p);
    }
    /* - SOMMET------------------------------*/
    OBJ* sommet(PILE *p) {
    	return ((OBJ *)(p->haut));
    }
     
     
     
    /*=====================================*/
    /* AJOUT D'UN OBJET		    */
    /*=====================================*/
    BOOLEEN empiler(OBJ *nouvObj, PILE* p) {
    CELLULE *e;
    	e = _trouverPlace(p);
    	if (e == NULL)		/* Mémoire saturée */
    		return (FAUX);
    	else {
    		_copierObjet(nouvObj,e);
    		e->lienprec = p->haut;
    		p->haut = e;
    		return (VRAI);
    	}
    }
    /*==========================================*/
    /* RETRAIT D'UN OBJET			*/
    /*==========================================*/
    BOOLEEN depiler(PILE* p) {
    CELLULE *e;
    	if (_pileVide(p))
    		return (FAUX);	/* Pile vide */
    		else {
    			e = p->haut;
    			p->haut = e->lienprec;
    			free(e);	/* libérer la place */
    			return (VRAI);
    		}
    }
    et j'ai donc un autre point c où j'inclus #include "pile.h"


    J'ai commencé à dévelloper avec KDevellop et il me jette à la compilation . (Je précise qd même que si je ne créé pas de .h ca marche)

    J'ai des messages du genre "'PILE' undeclard first use in this function"

    Est ce qu'il faut compiler autrement lorsqu'on intégre un .h?

    Merci pour vos réponses

  11. #11
    Expert confirmé

    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 : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il faut mettre les déclarations des structures dans le .h...

    [EDIT] Vu que tu as un type booléen défini par des macros, il faudra intégrer ces macros dans ton .h

    Syndrôme du lundi matin...
    [/EDIT]
    pile.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    #ifndef H_PILE
    #define H_PILE
     
    #define BOOLEEN int
    #define VRAI 1
    #define FAUX 0 
     
    typedef struct {
    	double valeur;
    	int code;
    }OBJ;
     
    typedef struct cel {
    	OBJ objet;
    	struct cel *lienprec;
    } CELLULE;
     
    typedef struct {
    	CELLULE *haut;
    } PILE;
     
    PILE *creerPile();
    OBJ *sommet(PILE *p);
    BOOLEEN empiler(OBJ *nouvObj, PILE *p);
    BOOLEEN depiler (PILE* p);
     
    #endif /* guard */
    Après, j'ai pris l'habitude de mettre une déclaration des fonctions statiques au début du fichier .c, donc cela devient:

    pile.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    /*=====================================*/
    /* Outils internes (privés)	    */
    /*=====================================*/
     
    static CELLULE * _trouverPlace();
    static void _copierObjet(OBJ *nouvObj, CELLULE *e);
    static BOOLEEN _pileVide(PILE *p) ;
     
    /*- TROUVER_PLACE ---------------------*/
    CELLULE * _trouverPlace() {
    CELLULE *e;
    	e = NEW(CELLULE);
    	return (e);
    }
    /*- COPIER_OBJET -----------------------*/
    void _copierObjet(OBJ *nouvObj, CELLULE *e) {
       memcpy(e, nouvObj, sizeof(OBJ));
    }
     
    /* - PILE_VIDE----------------------------*/
    BOOLEEN _pileVide(PILE *p) {
    	if (p->haut == NULL)
    		return (VRAI);
    	else
    		return (FAUX);
    }
    Je n'ai pas regardé le reste du code...

    Jc

  12. #12
    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 mikedavem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #ifndef H_PILE
    #define H_PILE
     
    PILE *creerPile();
    OBJ *sommet(PILE *p);
    bool empiler(OBJ *nouvObj, PILE *p);
    bool depiler (PILE* p);
     
    #endif /* guard */
    Incohérent.
    • PILE n'est pas défini.
    • OBJ n'est pas défini.
    • bool n'est pas défini.

    Un header doit être 'autonome'. Il doit contenir/inclure tout ce qu'il lui est nécessaire. Ni plus, ni moins.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #ifndef H_PILE
    #define H_PILE
     
    /* pile.h */
     
    #define BOOLEEN int
    #define VRAI 1
    #define FAUX 0
     
    typedef struct 
    {
       double valeur;
       int code;
    }
    OBJ;
     
    typedef struct cel 
    {
       OBJ objet;
       struct cel *lienprec;
    }
    CELLULE;
     
    typedef struct 
    {
       CELLULE *haut;
    }
    PILE;
     
    PILE *creerPile(void);
    OBJ *sommet(PILE *p);
    BOOLEEN empiler(OBJ *nouvObj, PILE *p);
    BOOLEEN depiler (PILE* p);
     
    #endif /* guard */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    /* ----------- pile.c ---------- */
     
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "pile.h"
     
    #define NEW(x) (x*)malloc(sizeof(x))
     
    /*=====================================*/
    /* Outils internes (privés)       */
    /*=====================================*/
     
    <...>

  13. #13
    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 fearyourself
    Après, j'ai pris l'habitude de mettre une déclaration des fonctions statiques au début du fichier .c, donc cela devient:
    Je crois deviner sous quelle influence !
    • Pour faire simple, les identificateurs commençant par _ sont réservés à l'implémentation
    • Il n'est généralement pas nécessaire de définir des prototypes séparés pour les fonctions privées (static)
    • Si ça l'était, ce serait pour des raisons qui méritent une explication et des précautions d'usage (référence croisées, récursion intentionelle ou non)
    • Il est étrange que les définitions de fonctions n'aient pas le mot clé 'static'. Le compilateur ne dit rien ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    /*=====================================*/
    /* Outils internes (privés)	    */
    /*=====================================*/
     
    /*- TROUVER_PLACE ---------------------*/
    static CELLULE * trouverPlace() 
    {
       CELLULE *e = NEW(CELLULE);
       return e;
    }
    /*- COPIER_OBJET -----------------------*/
    static void copierObjet(OBJ *nouvObj, CELLULE *e) 
    {
       memcpy(e, nouvObj, sizeof(OBJ));
    }
     
    /* - PILE_VIDE----------------------------*/
    static BOOLEEN pileVide(PILE *p) 
    {
       if (p->haut == NULL)
          return (VRAI);
       else
          return (FAUX);
    }
    C'est quand même une façon très compliquée d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static int pileVide(PILE *p) 
    {
       return p->haut == NULL;
    }
    J'ai toujours pas compris à quoi ça servait ces satanés booléens... Probablement un complot des fabricants de claviers...

  14. #14
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Effectivement . Ca marche mieux .

    En effet si on ne dit pas à quoi correspond les objets il ne risque pas de trouver ..

    Non le compilateur ne me dit rien . Pas un warning ...

    --> Rectification : J'ai des warning sur mon prog c qui utilise pile.h

    --> incompatible implicite declaration of built-in functiun 'malloc'
    --> incompatible implicite declaration of built-in functiun 'pow'
    --> incompatible implicite declaration of built-in functiun 'printf'
    --> incompatible implicite declaration of built-in functiun 'memcopy'


    Mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include "pile.h"
     
    // Fonction EVAL
    double EVAL(OBJ* expr, int lgr) {
     
    	PILE *ptr_pile;
    	OBJ *temp;
    	BOOLEEN verif;
    	int i;
     
    	// Création de la pile
    	ptr_pile = NEW(PILE);
     
    	if (ptr_pile) {
    		for (i=0;i<lgr;i++) {
    			if (expr[i].code == 0) 
    				verif = empiler(&(*(expr+i)),ptr_pile);
    			else {
    				temp = NEW(OBJ);
    				if (temp) {
    					// On stocke la valeur du sommet
    					temp->valeur = sommet(ptr_pile)->valeur; 
    					// On dépile
    					verif = depiler(ptr_pile);
    					// On effectue les opérations selon le cas
    					if ((int)expr[i].valeur>=-5 && ((int)expr[i].valeur <=-1)) {
    						switch((int)expr[i].valeur) {
    							case -1 : temp->valeur = (temp->valeur) + (sommet(ptr_pile)->valeur);
    							  	break;
    							case -2 : temp->valeur = (sommet(ptr_pile)->valeur) - temp->valeur;
    							  	break;
    							case -3 : temp->valeur = temp->valeur - (sommet(ptr_pile)->valeur);
    							  	break;
    							case -4 : temp->valeur = (sommet(ptr_pile)->valeur) / (temp->valeur); 
    							  	break;
    							case -5 : temp->valeur = pow((temp->valeur) , (sommet(ptr_pile)->valeur));
    							  	break;
    						}
    						// On fixe à 0 le code pour opérande
    						temp->code = 0; 
    						// On dépile la 2nd opérande
    						verif = depiler(ptr_pile); 
    						// On insère le résultat de l'opération
    						verif = empiler(temp,ptr_pile); 
    					}
    					else printf("Valeur erronée pour le champ valeur. Le résultat suivant sera tronqué :\n");
    				}
    				else printf("Erreur mémoire pour temp\n");			
    			}
    		}	
    	}
    	return (sommet(ptr_pile)->valeur);
    }
     
    // Fonction  principale
    int main (int argc , char *argv[]) {
     
    	// Expression à calculer soit 12. 6. / 1. + 3. 1. - ^
    	OBJ expression[] = {
    	{12.,0},{6.,0},{-4.,1},{2.,0},{-1.,1},{3.,0},{1.,0},{-2.,1},{-5.,1}
    	};
     
    	int nbexp = 9;
    	double resultat;
     
    	resultat = EVAL(expression,nbexp);
    	printf("%f\n",resultat);
    }
    En théorie il devrait y avoir un problème ?

    Merci bcp

  15. #15
    Expert confirmé

    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 : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par mikedavem
    Effectivement . Ca marche mieux .

    En effet si on ne dit pas à quoi correspond les objets il ne risque pas de trouver ..

    Non le compilateur ne me dit rien . Pas un warning ...

    --> Rectification : J'ai des warning sur mon prog c qui utilise pile.h
    Cela m'étonnerait, tu devrais avoir un problème pour la compilation de pile.c en pile.o, c'est tout. Pas pour le ficher lambda.c qui inclue pile.h...

    --> incompatible implicite declaration of built-in functiun 'malloc'
    --> incompatible implicite declaration of built-in functiun 'pow'
    --> incompatible implicite declaration of built-in functiun 'printf'
    --> incompatible implicite declaration of built-in functiun 'memcopy'


    Il te manque des inclusions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include <stdlib.h> //pour malloc
    #include <stdio.h> //pour printf
    #include <math.h> //pour pow
    #include <string.h> //pour memcpy
    PS: c'est memcpy et pas memcopy

    Jc

  16. #16
    Expert confirmé

    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 : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Je crois deviner sous quelle influence !
    Zut, je suis démasqué,

    Il est étrange que les définitions de fonctions n'aient pas le mot clé 'static'. Le compilateur ne dit rien ?
    Non, mais c'est vrai que je ne compile pas avec autant de warning que toi. J'utilise que -Wall -Wextra... Il faudrait que je vois ce qu'il dit avec tes 23 lignes de warnings

    J'ai toujours pas compris à quoi ça servait ces satanés booléens... Probablement un complot des fabricants de claviers...
    C'est un complot des langages qui se disent plus jolie parce qu'il y a un true ou un false...

    Jc

  17. #17
    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 mikedavem
    --> incompatible implicite declaration of built-in function 'malloc'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #include "pile.h"
    <...>
    	ptr_pile = NEW(PILE);
    <...>
    Ceci implique que NEW() soit défini dans pile.h. Par conséquent, il faut ajouter <stdlib.h> dans pile.h, car NEW() utilise malloc().

    Je rappelle : le header doit être 'autonome'. Il doit inclure tout ce qui lui est nécessaire. (Ou nécessaire aux fichier qui utilisent ses ressources comme la macro NEW()).

  18. #18
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Effectivement en placant tout au bon endroit ca marche bcp mieux . Il n'y a plus de warning.

    Merci

    Par contre tjrs aucune erreur en compilant chaque fichier à part .
    pile.c , pile.h et fichierlamba.c

  19. #19
    Expert confirmé

    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 : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par mikedavem
    Effectivement en placant tout au bon endroit ca marche bcp mieux . Il n'y a plus de warning.

    Merci

    Par contre tjrs aucune erreur en compilant chaque fichier à part .
    pile.c , pile.h et fichierlamba.c
    Depuis quand on compile un fichier .h?

    Jc

  20. #20
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Dsl , rectification

    pile.c et fichierlamba.c

Discussions similaires

  1. creer sa propre bibliotheque multimedia
    Par elmcherqui dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 04/10/2008, 12h10
  2. creer sa propre icone dans la toolbar
    Par hysah dans le forum wxPython
    Réponses: 1
    Dernier message: 15/01/2006, 20h15
  3. [Librairies]Creer son propre package
    Par Janitrix dans le forum Général Java
    Réponses: 5
    Dernier message: 17/12/2005, 22h18
  4. Créer ses propres Man
    Par byloute dans le forum Linux
    Réponses: 1
    Dernier message: 18/10/2005, 13h46
  5. Réponses: 2
    Dernier message: 14/06/2005, 14h36

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