mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Quellcode aufteilen in C


Autor: John Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
int getInt(void);


Eine Datei test.c in der steht
#include "test.h"

int getInt(void)
{
    return 0;
}

und die Main funktion:
#include<avr/io.h>
#include "test.h"

int main(void)
{
    getInt();
    return 0;
}


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


Watt muss ich tun?

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: John Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Chris K. (chrisk86)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Chris K. (chrisk86)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: gast (Gast)
Datum:

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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
$ gcc -o erstes_objekt.o -c erster_quelltext.c
$ gcc -o zweites_objekt.o -c zweiter_quelltext.c
$ 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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
- ...

Autor: John Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: John Smith (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sie sind auf der Festplatte im selben Ordner und im Projekt direkt drin.

Immernoch gleiche Fehlermeldung.

Autor: Chris M. (shortie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... und wo ist das Makefile bzw. hast du im Makefile

SRC = main.c matrix.c

stehen ?

Autor: John Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein. Danke :)

Autor: John Smith (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jop, funktioniert.

Danke @ all

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.