C Funktion auslagern

AMD_Rulez

Lieutenant
Registriert
Feb. 2010
Beiträge
582
hallo,

ich möchte mit C eine Funktion zur übersicht in eine andere Datei auslagern. als compiler benutze ich gcc unter debian.

ich habe folgende zwei dateien:

main.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "funktion.c"

int main()
{
printf("Hallo\n");

return 0;
}

funktion.c
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
printf("Hallo\n");

return 0;
}

die ausgabe sollte sein:
Hallo
du da

wie compiliere ich die beiden dateien nun richtig miteinander mit gcc und stimmt die syntax?!
 
Probiers doch einfach zum Kompilieren. Den Befehl dafür kannst du aus der nächsten Suchmaschine raussuchen lassen.

Und wahrscheinlich wird er einen Fehler erzeugen. Du deklarierst die gleiche Funktion (int main() ) zweimal. Außerdem weiß ich nicht, wie er "du da" ausgeben soll, wenn es nicht im Quelltext steht.:rolleyes:
 
Wieso schreibst du nicht, was du bislang so versucht hast mit gcc? oO

Und die Syntax stimmt. Aber gültige Syntax heißt nicht, dass es auch richtig ist.

Du hast zwei Funktionen "main" => geht nicht... zudem ist in der zweiten main die Ausgabe falsch, und die erste ruft die andere ja gar nicht auf... und includieren sollte man nur header-Dateien...
 
Eingebunden werden über #include in der Regel nur Header-Dateien mit der Endung .h. Die enthalten dann die Deklaration der ausgelagerten Funktionen, deren Definitionen kommen dann wieder in eine .c Datei.

Aufruf: gcc main.c funktion.c -o test

Nachtrag mit Beispiel:

main.c
Code:
#include <stdio.h>
#include <stdlib.h>
#include "funktion.h"

int main()
{
  printf("Hallo\n");
  funktion();
  return 0;
}

funktion.h
Code:
#ifndef FUNKTION_H
#define FUNKTION_H
void funktion();
#endif

funktion.c
Code:
#include <stdio.h>
#include "funktion.h"

void funktion()
{
  printf("du da\n");
}
 
Zuletzt bearbeitet: (Beispiel ergänzt)
ich glaube du solltest dich zuerst mit den Grundlagen von C auseinader setzen. Wenn du das gemacht hast wirst du dir deine Frage selber beantworten können :)
 
tut mir leid habe ausversehen zwei mal die selbe datei kopiert. aber danke das beispiel hat mir sehr geholfen:)
 
Man kann auch in seinem Makefile erstmal alle Dateien, die keine main() enthalten kompilieren lassen und am
Ende nur Linken. Das hat Vorteile, wenn eine Datei Funktionen Enthält, die von mehreren Stellen verwendet
werden. Das geht mit der Option -c. Also z.B. so:

Code:
CC=gcc
CFLAGS=-Wall -ggdb -O0

all:
    make blub

blub: bla.o main.c
    $(CC) $(CFLAGS) -o $@ $^

bla.o: bla.c
    $(CC) $(CFLAGS) -c -o $@ $^
 
Zurück
Oben