C-Header File evtl. gültig oder nicht

Cyber

Cyber

.:DISTORTED:.
Moinssens. In einem kleineren Projekt habe ich mehrere C-Funktionen (also jeweils eigenständige _mains) die allesamt ein gemeinsames Headerfile includen.
Ist der include innerhalb einer main(), dann ist alles gut. Da ich nu aber auch ein struct global haben will, muss ich ausserhalb der main() includen. Der Compiler
läuft sauber durch, aber zur Laufzeit bekomme ich ein "unresolved external Function". Es liegt definitiv am headerfile, denn zum einen definiere ich dort Konstanten, aber auch zum anderen Variablen. Nehme ich die Variablendef. heraus, dann habe ich zumindest ncihtmehr den Laufzeitfehler.
Ist das überhaupt zulässig?
Hier mal ein Auszug:
Code:
/*****     Aktivieren/Deaktivieren der Debug-Ausgabe (TRUE/FALSE)      *****/
#ifndef DbgPrnt
BOOL DbgPrnt = TRUE;
#endif

/*****     Groesse in Bytes der Headerrohdaten einer Rezept-Instanz      *****/
#ifndef HEADERSIZE
#define HEADERSIZE 200
#endif

/*****     Blockgroesse in Bytes der Nettodaten einer Rezept-Instanz      *****/
#ifndef BLOCKSIZE
#define BLOCKSIZE 180
#endif

/*****     Groesse in Bytes der globalen Rezeptverwaltungsinstanz     *****/
#ifndef GLOBRECLIST
#define GLOBRECLIST 100
#endif

/*****     Leerer dummystring mit einer Laenge von 64 Blanks     *****/
#ifndef DummyBlanks
char DummyBlanks[65]="                                                                ";
#endif
 
Hm darf man einen string mit '' belegen? Meines wissens sollte man "" benutzen oder?
 
Mir ist nicht klar, was Du eigentlich machen moechtest, und der Auszug aus dem Code hilft auch nicht viel weiter.

Sind Deine 'mains' lauter eigene Programme, die eine header-Datei benutzen, oder sollen alle zu einem Programm werden? Kannst Du mal einen BeispielCode schicken (evtl. konstruiert), der diesen Fehler erzeugt?

Ich glaube nicht, dass Du mit einer #ifdef-Direktive die Existenz von Variablennamen abfangen kannst. Du muesstest innerhalb des letzten schon ein echtes Makro einfuehren, das Du zum Testen abfragst, in etwa
Code:
#ifndef DUMMYBLANKS
char DummyBlanks[65]="                                                                ";
#define DUMMYBLANKS
#endif

@root1992: Hast Du evtl. den Scrollbalken uebersehen?
 
Hi rikola,
also das ganze ist folgendermaßen (*tief-lufthol*):
Ich arbeite mit einem System zur Prozessvisualsierung der Verfahrenstechnik (sprich der Bediener hat ein oder mehrere bunte Bildchen seiner Produktionsanalge o.ä. und kann darüber alles bedienen und beobachten). In diesem System kann man z.B. grafische Elemente oder spezielle Funktionen zur Archivierung oder Meldungserzeugung per ANSI-C ansprechen oder beeinflussen.
Hierfür kann man sich eine freie Funktion erstellen, die zwar einen _main() Charakter hat, jedoch nur linear runterprogrammiert werden kann, sprich es können keine weiteren funktionen innerhalb dieser selbst stehen. Man kann aber sehr wohl andere Funktionen aufrufen. Alle Funktionen werden über einen internen Mechanismus zu einem großen Executable, haben aber trotzdem nichts gemeinsam.

Variblen sind prinzipiell nur innerhalb einer Funktion während der Abarbeitung bekannt. Ausnahme bildet nur eine globale Variable die
extern definiert wird. Der Inhalt einer solchen Variable wäre somit auch in einer anderen Funktion zugänglich.
So, ich hoffe ich konnte das zum Thema mains gut genug rüberbringen.

Das mit dem #ifdef ist so eine Sache. Ich habe viel nachgelesen und gesucht, aber nirgendwo steht, dass es definitiv nicht geht. Ein Arbeitskollege der auch etwas Erfahrung mit C/C++ hat, konnte mir auch nicht definitv sagen ob es zulässig. Zumindest der eingebaute Compiler meckert nicht und der macht normalerweise einem Korinthenkacker alle Ehre.

Deine Variante werde ich morgen mal probieren, klingt irgendwie einleuchtend, dann folgt auch nochmal ein Beispielcode.
 

Ähnliche Themen

NagiosGrapher 1.7.1 funktioniert nicht

probleme mit select()

Problem mit pthread_cond_timedwait

undefined reference

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

Zurück
Oben