This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: Preprocessing in two or more C sources
- From: "Claudio Bley" <bley at cs dot uni-magdeburg dot de>
- To: gcc-help at gcc dot gnu dot org
- Date: Thu, 11 Jul 2002 01:09:42 +0200
- Subject: Re: Preprocessing in two or more C sources
- References: <001e01c22833$5e19afa0$1b27e6c1@racai.ro>
>>>>> "Radu" == Radu ION <radu@racai.ro> writes:
Radu> Hello Problem : there are given 3 files : header.h,
Radu> source1.c, source2.c. The header is included in both
Radu> source1.c and source2.c and contains some global definitions
Radu> of variabiles. After compilation, the linker complained that
Radu> he saw redefinitions. So, the whole header.h is now
Radu> enclosed by : #ifndef NAME #define NAME (on separate lines)
Radu> and #endif The problem is still there. I can workaround
Radu> this, but I don't understand. My compile command was : gcc
Radu> -Wall -ggdb source1.c source2.c -o runme My logical
Radu> assumption was that gcc should remember all the #define NAME
Radu> directives and behave accordingly on subsequent
Radu> preprocessing on sources. It appears that every source is
Radu> preprocessed independently and so, the preprocessing is done
Radu> once per source file without state information being
Radu> exchanged (i.e. in source2.c NAME, should have already been
Radu> defined) Is that true ?
Yes, it is true that the files are processed independently of each
other. You shouldn't define instances of (global) variables in any
header file. You need to declare them 'extern' (forward declaration)
and define them only at one location.
Radu> Does GNU Make know about this sort of problems ?
I guess no, it's a programming problem.
Radu> I wonder if I can use make to set up some 'project'
Radu> enviroment like in MSVC++ for instance.
I never used MSVC++, I don't know.
Claudio