web-dev-qa-db-fra.com

Comment appeler une fonction à partir d'un fichier .c externe en C?

Mes fichiers sont

// main.c  

#include "add.c"

int main(void) {
    int result = add(5,6);
    printf("%d\n", result);
}  

et

// add.c  

int add(int a, int b) {
    return a + b;
}
37
ProtoTyPus

utilisation #include "ClasseAusiliaria.c" [Ne pas utiliser les crochets (<>)]

et je préfère sauvegarder le fichier avec .h extension dans le même répertoire/dossier.

#include "ClasseAusiliaria.h"

27
Gaurav Jain

Change ton Main.c ainsi

#include <stdlib.h>
#include <stdio.h>
#include "ClasseAusiliaria.h"

int main(void)
{
  int risultato;
  risultato = addizione(5,6);
  printf("%d\n",risultato);
}

Créer ClasseAusiliaria.h ainsi

extern int addizione(int a, int b);

J'ai ensuite compilé et exécuté votre code, j'ai obtenu une sortie de

11
9
Elliott Frisch

Vous devez déclarer int add(int a, int b); (remarque au point-virgule) dans un fichier d'en-tête et l'inclure dans les deux fichiers. L'inclure dans Main.c indiquera au compilateur comment appeler la fonction. Inclure dans le second fichier vous permettra de vérifier que la déclaration est valide (le compilateur se plaindrait si déclaration et implémentation ne correspondaient pas).

Ensuite, vous devez compiler les deux fichiers * .c dans un projet. Les détails dépendent du compilateur.

5
Alexandr

Il y a beaucoup de grandes contributions ici, mais permettez-moi d'ajouter la mienne non moins.

La première chose que j'ai remarquée est que vous n'avez pas promis dans le fichier principal que vous alliez créer une fonction appelée add (). Ce compte a été fait comme ceci dans le fichier principal:

    int add(int a, int b); 

avant votre fonction principale, votre fonction principale reconnaîtrait ainsi la fonction add et essaierait de rechercher son code exécutable. Donc, essentiellement, vos fichiers doivent être

Principal c

    int add(int a, int b);

    int main(void) {
        int result = add(5,6);
        printf("%d\n", result);
    }  

et // add.c

    int add(int a, int b) {
        return a + b;
    }
4
Precious George

faire un fichier classAusiliaria.h et là fournissent vos signatures de méthode.

Maintenant, au lieu d'inclure le fichier .c, incluez ce fichier .h.

3
Kraken

Vous pouvez inclure les fichiers .c, sans problème logiquement, mais selon la norme, pour masquer l'implémentation de la fonction, mais pour fournir les techniques binaires, en-têtes et fichiers source utilisées, les en-têtes servant à définir les signatures de fonction. où les fichiers source ont l'implémentation. Lorsque vous vendez votre projet à l’extérieur, il vous suffit d’envoyer les en-têtes et les fichiers binaires (libs et dll) pour masquer la logique principale de l’implémentation de votre fonction.

Ici, le problème est que vous devez utiliser "" au lieu de <> car vous incluez un fichier qui se trouve dans le même répertoire que le fichier dans lequel l'inclusion a lieu. Il est commun aux fichiers .c et .h

3
Varo
 write main.c like this - 
 caution : while linking both main.0 and ClasseAusiliaria.o should be 
 available to linker.

 #include <stdlib.h>
 #include <stdio.h>
 extern int addizione(int a, int b)

 int main(void)
 {
     int risultato;
     risultato = addizione(5,6);
     printf("%d\n",risultato);
 }
2
susheel pandey

vous ne devriez pas inclure de fichiers c dans d'autres fichiers c. Au lieu de cela, créez un fichier d’en-tête dans lequel la fonction que vous souhaitez appeler est déclarée. Comme ceci: fichier ClasseAusiliaria.h:

int addizione(int a, int b); // this tells the compiler that there is a function defined and the linker will sort the right adress to call out.

Dans votre fichier Main.c, vous pouvez ensuite inclure le fichier d’en-tête nouvellement créé:

#include <stdlib.h>
#include <stdio.h>
#include <ClasseAusiliaria.h>

int main(void)
{
    int risultato;
    risultato = addizione(5,6);
    printf("%d\n",risultato);
}
2
UsYer