Forum: Mikrocontroller und Digitale Elektronik Quellcode aufteilen in C


von John Smith (Gast)


Lesenswert?

Hallo

ganz einfache Frage: Wie teile ich den Quellcode in mehrere Dateien auf?

Ich erstelle eine Datei z.B. test.h in der Datei steht nichts weiter als
1
int getInt(void);


Eine Datei test.c in der steht
1
#include "test.h"
2
3
int getInt(void)
4
{
5
    return 0;
6
}

und die Main funktion:
1
#include<avr/io.h>
2
#include "test.h"
3
4
int main(void)
5
{
6
    getInt();
7
    return 0;
8
}


Leider kommt der Fehler "undefined reference to `getInt'"


Watt muss ich tun?

von Johannes M. (johnny-m)


Lesenswert?

John Smith wrote:
> Watt muss ich tun?
Die test.c dem Projekt hinzufügen...

von John Smith (Gast)


Lesenswert?

Okay.

Ich habe oben links das Projekt stehen. Da klicke ich mit rechter 
Maustaste drauf-> Add Files -> Füge die 3 Dateien hinzu-> kompilieren-> 
gleiche Fehlermeldung

von Chris K. (chrisk86)


Lesenswert?

Du musst da nichts hinzufügen, du musst in der Main statt
>> #include "test.h"
folgendes schreiben
>> #include "test.c"
Achte auf das c und das h

Liebe Grüße,
Chris

von Falk B. (falk)


Lesenswert?

Sämtliche Header und Quelldateien müssen im AVR-Studio unter Quell- und 
hederdateien im Projekt angegeben sein, sonst werden sie trotz include 
ignoriert.

MFG
Falk

von Falk B. (falk)


Lesenswert?

@  Chris K. (chrisk86)

> #include "test.c"
>Achte auf das c und das h

Darauf solltest du vor allem achten! Quelldateien werden NICHT per 
include eingefügt, auch wenn das prinzipiell geht!

MFG
Falk

von Johannes M. (johnny-m)


Lesenswert?

Chris K. wrote:
> Du musst da nichts hinzufügen, du musst statt
>>> #include "test.h"
> folgendes schreiben
>>> #include "test.c"
> *Achte auf das c und das h*
Das ist absoluter Quatsch! Sourcen werden nicht includet!

von Chris K. (chrisk86)


Lesenswert?

Man kann auch den Header includen. Dann muss aber am Ende des Headers 
die .c includet werden.
So wie der Threadersteller die Dateien angelegt hat, muss die .c 
includet werden...

Chris

von gast (Gast)


Lesenswert?

3 Dateien?
die *.h fügst du im "ordner" header files mit ein und die *.c da wo 
deine main ist (source files)

von Sven P. (Gast)


Lesenswert?

Chris K. wrote:
> Du musst da nichts hinzufügen, du musst in der Main statt
>>> #include "test.h"
> folgendes schreiben
>>> #include "test.c"
> *Achte auf das c und das h*
Niemals, das ist Murks.

Ansonsten ohne Klickibuntiblablabla, son Quatsch braucht auch kein 
Mensch.
Kommando:
1
$ gcc -o erstes_objekt.o -c erster_quelltext.c
2
$ gcc -o zweites_objekt.o -c zweiter_quelltext.c
3
$ gcc -o programm erstes_objekt.o zweites_objekt.o

Fertig aus.

Und nochmal mit Nachdruck:
*C-DATEIEN WERDEN GRUNDSÄTZLICH NIEMALS INKLUDIERT!*

Es gibt wohlgewählte Ausnahmen, das Problem hier ist aber keine.

von Gast (Gast)


Lesenswert?

Chris K. wrote:
> Du musst da nichts hinzufügen, du musst statt
>>> #include "test.h"
> folgendes schreiben
>>> #include "test.c"
> *Achte auf das c und das h*
Das ist absoluter Quatsch! Sourcen werden nicht includet!


naja, quatsch ist das nicht, kann man so oder so machen. ich füge die 
dateien auch immer hinzu, da ich dann auch schnell darauf zugreifen kann 
wenn diese bearbeitet werden müssen. (wenn du sie hinzufügst kümmert 
sich avr studio um das include der *.c)

von Sven P. (Gast)


Lesenswert?

Gast wrote:
> Chris K. wrote:
>> Du musst da nichts hinzufügen, du musst statt
>>>> #include "test.h"
>> folgendes schreiben
>>>> #include "test.c"
>> *Achte auf das c und das h*
> Das ist absoluter Quatsch! Sourcen werden nicht includet!
>
>
> naja, quatsch ist das nicht, kann man so oder so machen.
Das ist kein Quatsch, richtig. Das ist absoluter BULLSHIT. Spätestens, 
wenn ein zweites Objekt dazu kommt, wird dir der Linker deinen Kram um 
die Ohren hauen.
C-Dateien mit #include zu bearbeiten bringt nur Probleme:
- der Linker findet doppelte Symbole
- Übersetzung dauert länger
- Makefiles sind nicht mehr brauchbar
- ...

von John Smith (Gast)


Lesenswert?

Also auf der Festplatte alle im gleichen Ordner und im WinAVR im Projekt 
einen Ordner beliebigen Namens erstellen und da die Header rein? Und die 
*.c Dateien einfach direkt im Projekt (ohne Ordner)?

von Johannes M. (johnny-m)


Lesenswert?

Die Dateien kommen alle in den selben Ordner, sowohl die Sourcen als 
auch die dazugehörigen Header! Die Sourcen werden dem Compiler 
vorgeworfen und die Header da, wo sie benötigt werden, mit #include 
eingebunden.

Das, was Chris K. und Gast da erzählen ist wirklich Bullshit (danke, 
Sven, für den Fachausdruck;-).

Damit der Präprozessor die mit #include "XYZ.h" eingebundenen Header 
findet, müssen sie im selben Ordner stehen wie die Sourcen.

von John Smith (Gast)


Angehängte Dateien:

Lesenswert?

Sie sind auf der Festplatte im selben Ordner und im Projekt direkt drin.

Immernoch gleiche Fehlermeldung.

von Chris M. (shortie)


Lesenswert?

... und wo ist das Makefile bzw. hast du im Makefile

SRC = main.c matrix.c

stehen ?

von John Smith (Gast)


Lesenswert?

Nein. Danke :)

von John Smith (Gast)


Lesenswert?

Jop, funktioniert.

Danke @ all

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.