2 Module 1 Header kein Programm

A

aragon19

Grünschnabel
Da bin ich wieder, nur in einem anderem Teil des Forums. Hoffe es kann mir schnell jemand helfen.

Habe aus dem Internet schnell mal ein Tutorial gestartet um das Modulweise Programmieren mit C zu üben. Dazu habe ich drei Edit-Dateien geschrieben.
Eine test.c
#include <stdio.h>
#include "incl.h"
void main(void)
{
Modul();
Ausgabe
}
Dann eine kleine modul.c
void Modul (void)
{
Ausgabe
}
und zuguter Letzt die headerdat incl.h:
#define Ausgabe printf("\nHier ist das Modul\n");
void Modul(void);
#include "modul.c"
#undef Ausgabe
#define Ausgabe printf("\nHier ist die Ausgabe\n");

Dann alles kompiliert mit gcc -o test test.c Keine Fehlermeldung (außer das meine Main keinen integer zurück gibt, aber das ist nicht so schlimm)

Dann führe ich das Programm aus und ...
NICHTS passiert.
Er gibt nichts aus.
Ich verzweifele, weil ich einfach nicht weiß, wo der Fehler steckt.

Kann mir da einer helfen?

MfG Aragon19
 
Hi,

es wundert mich ein wenig dass du keine Fehlermeldungen bekommst, aber eventuell liegt es daran dass du modul.c in der header Datei einbindest. Das ist schonmal ein ordentlicher faux-pas, das sollte man niemals tun.

Als naechstes wuerde ich mir an deiner Stelle angewoehnen immer erstmal nur die einfachste aller moeglichen Versionen zu testen wenn etwas schief laeuft. In diesem Fall heisst es, diese verrueckten Makros rauszunehmen.

Ich wuerde ausserdem immer versuchen die header Datei wie die dazugehoerige c Datei zu nennen, also in deinem Fall module.h und module.c.

Wenn du anfaengst mit mehreren Modulen zu arbeiten, wuerde ich mir direkt angewoehnen mit make zu arbeiten, das vereinfacht viele Dinge enorm, und hilft haeufig auch beim Verstaendnis der notwendigen linking Schritte.

Hier z.B. ein kurzes, nettes Tutorial:
http://www.c-howto.de/tutorial-makefiles.html

Das Problem in deinem Fall ist wahrscheinlich, dass du module.c vorher nicht kompiliert hast, und fuer test.c nicht mit einbezogen hast.
Code:
gcc -c module.c
gcc -c test.c
gcc -o test module.o test.o


Nebenbei kennt das Board Code Bloecke. Wenn du die statt Zitat Bloecken verwendest, bleiben auch die Einrueckungen vernuenftig erhalten.

mfg,
bytepool
 
Ich danke vielmals für die Hilfe.
Als ich modul.c kompilieren wollte, hat er verstädnlicherweise, einen fehler geworfen, weil im modul.c nichts implementiert ist und er die ganzen Ausdrücke nicht kennt.
Ich denke einfachmal, dass das Beispiel zu schlecht ist.
Werde jetzt was eigenes schreiben. Nen kleinen Taschenrechner bestehend aus mehreren Modulen und dazu auch ne make.
Denke mal, dass das besser läuft.
Gruß Aragon19
 
Gern geschehen.

Ich denke einfachmal, dass das Beispiel zu schlecht ist.
Also wenn das tatsaechlich Beispiel Code aus einem Tutorial ist, wuerde ich definitiv sagen, Finger weg von dem Tutorial! Das hat eindeutig jemand geschrieben der von Tuten und Blasen keine Ahnung hat.

Prinzipiell ist es aber sicher nicht falsch erstmal mit einem sauberen minimal Beispiel anzufangen. Z.B. was in diese Richtung:
Code:
$ cat function.h
void function(void);

$ cat function.c
#include <stdio.h>
#include "function.h"

void function(void)
{
  printf("function called!\n");
}

$ cat testf.c
#include "function.h"

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

$ gcc -c function.c
$ gcc -c testf.c
$ gcc -o testf function.o testf.o
$ ./testf
function called!

mfg,
bytepool
 
Servus!

Mal davon abgesehen, dass das Beispiel-Programm einen miserablen Code-Stil hat, sollte es trotzdem laufen. Bei mir hat es zumindest funktioniert. Ausgabe des Programms:
$ ./test

Hier ist das Modul

Hier ist die Ausgabe

Gruß,
Philip
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

Xubuntu - AVR32-linux crosscompile sqlite

Verständnisrobleme

C Programm unter Unix

fußballstatistik auswerten

Zurück
Oben