Comment appeler la fonction externe.c fichier en C?

Mes fichiers sont

// main.c  

#include "add.c"

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

et

// add.c  

int add(int a, int b) {
    return a + b;
}
25
demandé sur piperchester 2014-01-21 18:21:41

8 réponses

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

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

#include "ClasseAusiliaria.h"

17
répondu Gaurav Jain 2018-03-21 08:23:42

changer votre Main.c comme ça

#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 comme si

extern int addizione(int a, int b);

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

11
6
répondu Elliott Frisch 2014-01-21 14:58:23

vous devez déclarer int addizione(int a, int b); (note du point-virgule)) dans un fichier d'en-tête et inclure le fichier dans les deux fichiers. Y compris dans Main.c dira compilateur comment la fonction doit être appelée. Inclure dans le deuxième fichier vous permettra de vérifier que la déclaration est valide (le compilateur se plaindrait si la déclaration et la mise en œuvre n'étaient pas appariées).

alors vous devez compiler les deux *.c dossiers en un seul projet. Les détails dépendent du compilateur.

5
répondu Alexandr 2014-01-21 14:25:53

créer un fichier classAusiliaria.h et y fournir vos signatures de méthode.

maintenant au lieu d'inclure le .c inclure ce fichier .h fichier.

3
répondu Kraken 2014-01-21 14:26:41

vous pouvez inclure le .c fichiers, aucun problème avec elle logiquement, mais selon la norme pour cacher la mise en œuvre de la fonction, mais pour fournir les binaires, les en-têtes et les fichiers source techniques sont utilisées, où les en-têtes sont utilisés pour définir les signatures de la fonction où que les fichiers source ont l'implémentation. Lorsque vous vendez votre projet à l'extérieur, il vous suffit d'expédier les en-têtes et les binaires(libs et dlls) de sorte que vous cachez la logique principale derrière votre mise en œuvre de la fonction.

ici, le problème est que vous devez utiliser "" au lieu de <> car vous incluez un fichier qui est situé à l'intérieur du même répertoire vers le fichier où l'inclusion se produit. Il est commun aux deux .c et .h les fichiers

3
répondu Varo 2014-01-21 14:44:49

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

la première chose que j'ai remarqué, c'est que vous n'avez pas fait de promesses 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, de cette façon votre fonction principale reconnaîtrait la fonction add et essaierait de chercher son code exécutable. Donc essentiellement vos fichiers devrait être

Main.c

    int add(int a, int b);

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

et // ajouter.c

    int add(int a, int b) {
        return a + b;
    }
3
répondu Precious George 2016-06-03 13:27:05

vous ne devez pas inclure de C-files dans les autres c-files. Créez plutôt un fichier d'en-tête où la fonction est déclarée que vous voulez appeler. Comme: 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 Main.c fichier vous pouvez alors 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
répondu UsYer 2014-01-21 14:30:18
 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
répondu susheel pandey 2015-06-27 07:46:26