2014-01-21 28 views
21

Meine Dateien sindWie Funktion aus externen C-Datei in C aufrufen?

// main.c 

#include "add.c" 

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

und

// add.c 

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

Sie sollten die Signatur 'int Addizione exportieren (int a, int b)' in einer Header-Datei (zB 'ClasseAusiliaria.h'). – Massimiliano

+1

http://stackoverflow.com/questions/5904530/understanding-header-and-source-files-in-c – kol

+0

dieses Themas Follow-up, das kann man [einschließlich einer C-Quelldatei in einem anderen eine Vorstellung geben ? 1] [] [1]: http://stackoverflow.com/questions/232693/including-one-c-source-file-in-another – Varo

Antwort

14

Verwendung #include "ClasseAusiliaria.c" [Verwendung spitzen Klammern Dont (<>)]

und ich ziehe Datei mit .h Erweiterung im selben Verzeichnis/Ordner speichern .

#include "ClasseAusiliaria.h"

+15

Warum bevorzugen Sie .h stattdessen .c ? Es gibt einen Unterschied? – ProtoTyPus

+0

Warum ist es besser, .h-Dateien zu verwenden: http://Stackoverflow.com/a/232710/6028746 –

4

Sie müssen int addizione(int a, int b); (Hinweis auf das Semikolon) in einer Header-Datei und schließen Sie die Datei in beiden Dateien deklarieren. Die Angabe in Main.c sagt dem Compiler, wie die Funktion aufgerufen werden soll. Durch die Einbindung in die zweite Datei können Sie überprüfen, ob die Deklaration gültig ist (der Compiler würde sich beschweren, wenn die Deklaration und die Implementierung nicht übereinstimmen).

Dann müssen Sie beide * .c Dateien in ein Projekt kompilieren. Details sind compilerabhängig.

2

machen Sie eine Datei classAusiliaria.h und in dort bieten Sie Ihre Methode Signaturen.

Fügen Sie jetzt anstelle der .c-Datei diese .h-Datei ein.

+0

Es sagt mir, dass es im Verzeichnis die Datei nicht findet! – ProtoTyPus

+1

machen Sie eine '#include" -KlasseAusiliaria.h "' Das ist anstelle von '<>' '' '' – Kraken

5

wie Ihre Main.c ändern so

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

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

ClasseAusiliaria.h erstellen wie so

extern int addizione(int a, int b); 

ich dann Ihren Code kompiliert und lief, habe ich eine Ausgabe von

bekam
11 
1

Sie shouldn‘ t enthalten c-Dateien in anderen c-Dateien. Erstellen Sie stattdessen eine Headerdatei, in der die Funktion deklariert ist, die Sie aufrufen möchten. Wie so: Datei 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. 

In Ihrem Main.c Datei enthalten Sie können dann die neu Header-Datei erstellt:

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

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

Sie können die .c-Dateien enthalten, kein Problem mit ihm logisch, aber nach dem Standard, um die Implementierung der Funktion zu verbergen, sondern um die Binärdateien, Header und Quelldateien Techniken zur Verfügung zu stellen, wo die Header verwendet werden, um die Funktion Signaturen zu definieren, wo die Quelldateien die Implementierung haben. Wenn Sie Ihr Projekt nach draußen verkaufen, versenden Sie nur die Header und Binaries (libs und dlls), so dass Sie die Hauptlogik hinter Ihrer Funktionsimplementierung verbergen.

Hier ist das Problem, dass Sie "" anstelle von <> verwenden müssen, da Sie eine Datei einschließen, die sich im selben Verzeichnis befindet wie die Datei, in der die Inklusion stattfindet. Es ist sowohl auf .c und .h-Dateien

1
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

Es gibt viele gute Beiträge hier gemeinsam, aber lassen Sie mich Mine nicht weniger hinzuzufügen.

Das erste, was ich bemerkte, ist, dass Sie keine Versprechen in der Hauptdatei gemacht haben, dass Sie eine Funktion namens add() erstellen wollten. Diese Zählung wurde, wie dies in der Hauptdatei getan:

int add(int a, int b); 

vor Ihrer Hauptfunktion, auf diese Weise Ihre Hauptfunktion die Add-Funktion erkennen würde und versuchen, für seinen ausführbaren Code zu suchen. So im Wesentlichen sollten Sie Ihre Dateien

Main.c sein

int add(int a, int b); 

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

und // add.c

int add(int a, int b) { 
     return a + b; 
    } 
Verwandte Themen