Probleme mit Modularisierung mit #IFNDEF usw
-
Hallo Leute, ich stehe wieder mal vor einem Problem und hoffe auf eure Hilfe...
In einem Projekt in unserer Techniker Schule sollen wir ein Programm schreiben, dieses habe ich komplett fertig geschrieben und alles funktioniert. Jetzt haben wir allerdings erfahren, dass unserer Lehrer das Programm in Module aufgeteilt haben möchte... (vorher hatte ich die Quelldateien mit #include "*.c") eingebunden!
Habe jetzt schon ein paar Stunden gesucht und versucht allerdinges hauts irgendiwe nicht hin... meine 2 C-Bücher und das Beispiel vom Lehrer bringens auch nich wirklich...
Jetzt seit ihr gefragt:
(Nutzte Dev C++)
Hier mal die vereinfachte Fassung der Quelldateien...
Beim Kompilieren bekomme ich immer:
[Linker error] undefined reference to `order_hauptprog'main.c
#include "webvolt.h" #include "order.h" int main (void) { setlocale(LC_ALL, ""); order_hauptprog(); }
webvolt.h
//INCLUDES #include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> #include <fcntl.h> //DEFINES #define BAUDRATE B19200 #define DBGROESSE 100 #define XABSTAND 10 #define TASTRATE 20 #define XSTART 470 //int #define YSTART 600.0 //double //OS-Abhängige DEFINES und INCLUDES //OS ist Windows #if defined(_WIN32) || defined(_WIN64) #include "com_init_win.h" #include <io.h> #include <conio.h> #include <dos.h> #define KALIBRIEREN fopen("./kalibrieren.txt","r") #define OPENPORT open(DEVICE,O_RDWR | O_BINARY) #define MAXSTRING 255 #define DEVICE "com7" #define ENDE system("PAUSE") #define CLEAR system("cls") //OS ist Linux #elif defined(linux) || defined(__linux) #include "com_init.h" #define KALIBRIEREN fopen("./kalibrieren.txt","r") #define OPENPORT open(DEVICE, O_RDWR | O_NOCTTY) #define DEVICE "/dev/ttyUSB0" #define ENDE return 0 #define CLEAR system("clear") #endif
order.c
#include "order.h" //Kommunikation Hauptporgramm int order_hauptprog() { int port = 0; int fehler; //com_find_port(); //com_timer(500); //Schnittstelle initialisieren fehler = com_init(); if(fehler == -1) { printf("\nFehler in der Initialisierung!\n"); return 0; } com_timer(100); port = OPENPORT; //Kommunikation fehler = com_signalverarbeitung(port); if(fehler == -1) { printf("\nKEIN SIGNAL!\n"); close(port); return 0; } close(port); }
order.h
#ifndef _ORDER_H_ #define _ORDER_H_ int order_hauptprog(void); #endif // _ORDER_H_ extern int com_init(void); extern int com_signalverarbeitung(int port); extern void com_timer(unsigned int msec);
Hoffe jemand kann mir da einen Tip geben...
Wie gesagt es hat vorher alles funktioniert, aber irgendwie komme ich mit diesen Modulen nicht klar...
Danke!!!
Gruß
ph87
-
ph87 schrieb:
(vorher hatte ich die Quelldateien mit #include "*.c")
Das macht man nicht.
Es sei denn, du weißt was da passiert. Tust du gerade aber nicht.Du musst alle benötigten .c-Dateien in deinem Projekt eintragen.
Wo das bei Dev++ geht, weiss ich nicht.
Aber es wird auch dort ein Projektmenü oder ein Fenster mit einen Dateibaum (wo main.c drin steht) geben.Das include von Headerdateien sollte auch immer nur da passieren, wo sie benötigt werden.
In main.c benutzt du Fubktionen aus locale.h, hast aber kein include dafür.
In webvolt.h hast du eine Menge includes, benutzt aber kaum einen davon (string.h, locale.h, ...).Das extern bei Funktionsdeklaration (Zeile 7-9 in order.h) kannst du weglassen.