Forum Programmation.c séparation de source

Posté par  .
Étiquettes : aucune
0
23
déc.
2005
Je commence à séparer mes sources et je ne sais pas trop ce qu'il en est au niveau des macros. je m'explique:
(un exemple c'est tjrs mieu)
/*fonction.c*/
int somme(int a,intb)
{
return (a+b);
}

/*fonction.h*/
int somme(int a, int b);

ça je sais que ça marche, mais ensuite:
ce que je voudrait savoir c'est si je met une macro par exemple
#define MULTI(x,y) ((x)*(y))
est-ce qu'elle doit être dans le fichier fonction.c, dans le .h ou dans les deux?
  • # Où tu veux!

    Posté par  . Évalué à 4.

    Si tu veux uniquement utiliser ta macro dans ton '.c', tu mets ta macro dans ton '.c'. Mais si tu veux utiliser ta macro ailleurs (un autre '.c'), tu dois la mettre dans ton '.h' (qui sera inclus par l'autre '.c').

    Je te conseille de préfixer ta macro, pour éviter d'aventuel conflits avec des librairies/macro systèmes.

    #define MONPROJET_MULTI....
  • # Ça dépend

    Posté par  . Évalué à 2.

    Si tu veux que ta macro soit utilisable par plusieurs .c, tu la mets dans un .h.
    Si tu ne t'en serts que dans un .c, tu la mets dans le .c (au début pour être plus visible).

    Dans un .h, on ne mets que l'API, les déclarations de fonctions et de structures qui seront utilisées dans _plusieurs_ .c et .h.
    • [^] # Re: Ça dépend

      Posté par  . Évalué à 1.

      Evidemment cela depend aussi de la destination du .h, s'il sert a publier une API alors y foutre des macros uniquement utilisées dans divers .c d'usage interne a une lib ne ferait que pourrir l'environnement lexical de l'utilisateur de l'API en question, a l'inverse des definitions de fonctions inline (C99) faisant partie de la dite API, meme si le resultat est sans garantie, doivent etre presentes dans un tel .h.

      bref il ne faut pas se demander si telle ou telle macro, declaration, definition etc... doit se trouver dans tel ou tel fichier mais ou et a qui/quoi elle va servir, en fonction de quoi l'on peut determiner ou elle doit se trouver.

      mon cent.
      • [^] # Re: Ça dépend

        Posté par  . Évalué à 1.

        En fait mon projet actuel est de faire une calculette graphique (j'entend par là: pas en ligne de commande et non pas avec des courbes de fonctions)...
        et j'ai donc pour ce faire un fichier fonctions_calculette.h que j'inclu dans mon fichier calculette.c (avec aussi mon fichier menu.h, aide.h...)
        c'est juste pour m'y retrouver un peu parce que c'est mine de rien pour moi débutant que je suis un gros projet...
        • [^] # Juste inclure le header

          Posté par  . Évalué à 1.

          Tu mets la macro dans le header, elle sera inclue dans le fichier C avec la directive préprocesseur #include.

          /*-----calc.c-----*/
          //compiler avec gcc -Wall -O2 -o calc calc.c
          #include <stdio.h>
          #include "calc.h"

          int main()
          {
          printf("addition: %i\n",addition(2,5));
          printf("MULTI: %i\n",MULTI(2,5));
          return 0;
          }
          /*----fin calc.c----*/



          /*----calc.h---------*/
          int addition(int a, int b)
          {
          return a+b;
          }

          #define MULTI(x,y) ((x)*(y))

          /*---fin calc.h------*/
        • [^] # Re: Ça dépend

          Posté par  . Évalué à 2.

          Et pourquoi ne pas écrire une fonction plutot qu'une macro ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.