Am Freitag, 14. November 2008 20:59 schrieb Thomas Hertweck:
Meines erachtens ist hier die "Organisation" Deines Prokjektes/ Codes
nicht wirklich schön...
*SCNR*
Lies doch bitte die urspruenglichen Postings durch, bevor Du Mitten in
eine Diskussion einsteigst, die Du offensichtlich nicht so ganz verfolgt
hast oder verstehst, denn da wurde erwaehnt,
Gegeben sind:
./include/first.h
./include/second.h
./src/main.c
"first.h" bindet "second.h" ein.
"main.c" bindet "first.h" ein.
Das steht so in Deinem ersten Post?!
Der Inhalt der beiden Header:
cat first.h:
----------------
#ifndef _FIRST_
#define _FIRST_
#include "second.h"
#endif
cat second.h:
----------------
#ifndef _SECOND_
#define _SECOND_
#define MAIN "werner"
#endif
----------------
cat main.c
#include
#include "first.h" // <> sollte AFAIK auch funktionieren
int main(void)
{
printf("%s\n", MAIN);
return 0;
}
##########
Alles kompiliert, keine Frage...
Jetzt kopiere ich die second.h in "src"...
(Warum auch immer, ist ja total egal:)
In dieser "loaken" kopie füge ich nun ein neuen Makro ein "NEWMAIN"
(Wird selbstverständlich in main.c benutzt...)
cat ./src/second.h
-----------------
#ifndef _MAIN_H_
#define _MAIN_H_
#define MAIN "newwerner"
#define NEWMAIN "newmainwerner"
#endif
Kompilieren tue ich in "src"
gcc -I. -I ../include main.c
main.c: In Funktion »main«:
main.c:9: error: `NEWMAIN' undeclared (first use in this function)
main.c:9: error: (Each undeclared identifier is reported only once
main.c:9: error: for each function it appears in.)
Bringt keinen Erfolg. Warum nur?
---------
#include "first.h"
// DANN
#include "second.h"
IMHO wird nun zuerst die "first.h" eingelesen, diese liest
jetzt "IHRE" "second.h"...(in include)
Mein "lokaler" include wird so ignoriert, weil ja "include guards" drin
stehen?
_SECOND_H existiert ja schon....
Was passiert, wenn Du in der "main.c" zuerst die "second.h" inkludierst
und erst anschliessend die "first.h"?
Richtig!
Die lokale wird eingelesen und überschreibt die in "first.h"...
Jetzt klappt "gcc -I. -I../include" wieder... "-I." könnte man sich auch
sparen...
Nur so ein kleiner Gedanke...
Ohne genau zu wissen, was __genau__ in Deinen Dateien steht. Kann das
natürlich alles obige hinfällig werden...
wann solch eine Situation
Aenderungen einzupflegen. Daher stellt sich durchaus die Frage, wie sich
ein Praeprozessor korrekt verhalten sollte beim Einbinden der Header.
Zur Beantwortung dieser Frage hast Du ja leider nicht all zu viel
beigetragen. Natuerlich haben alle Header include Guards etc., es geht
hier nicht um Fehler von Programmieranfaengern, sondern um ein Problem,
das mitunter in der Praxis auftritt.
So so... Programmieranfaenger?!
Da spricht der Doktor :-\
Gruesse,
Thomas
Andre
--
To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-programming-de+help@opensuse.org