Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Ike Naar <ike@sverige.freeshell.org> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: Who owns the variable in my header file ? |
| Date | 2012-10-03 19:52 +0000 |
| Organization | A noiseless patient Spider |
| Message-ID | <slrn3vfsk6p5sk.b3q.ike@sverige.freeshell.org> (permalink) |
| References | <EK-dnVoFlczbHfHNnZ2dnUVZ8hidnZ2d@bt.com> |
On 2012-10-03, lipska the kat <lipskathekat@yahoo.co.uk> wrote:
> I have the following program
> distributed over 4 files
>
> /* foo.h */
> int foo;
>
> void fooset(int f);
> int fooget(void);
> void fooinc(void);
>
> /* main.c */
> #include <stdio.h>
> #include <foo.h>
>
> int main(int argc, char **argv){
>
> fooset(10);
> printf("foo is %d\n", fooget());
>
> fooinc();
> printf("foo is now %d\n", fooget());
>
> return 0;
> }
>
> /* fooset.c */
> #include <foo.h>
>
> void fooset(int f){
> extern int foo;
This extern declaration of 'foo' is harmless but unnecessary since
the #include <foo.h> already provides such a declaration.
> foo = f;
> }
>
> /* fooget.c */
> #include <foo.h>
>
> int fooget(void){
> extern int foo;
Same here.
> return foo;
> }
What is missing here is fooinc.c, but let's assume it exists
and contains
/* fooinc.c */
#include <foo.h>
int fooinc(void)
{
++foo;
}
> I run make on my makefile (I'm a beginner at make, Ant is more my thing)
> and see a humungous great glob of bytes called foo.h.gch, looks like
> foo.h has been compiled ... but I've no idea
> why it's so huge.
>
> -rw-rw-r-- 1 lipska lipska 1339792 Oct 3 17:28 foo.h.gch
>
> Anyway, the question is who 'owns' the foo declared in foo.h
> Storage is obviously set aside as when I run the program I get the
> expected output
>
> foo is 10
> foo is now 11
>
> I guess this big old lump of bytes has something to do with it.
Actually, the behaviour of your program is undefined, because
there is more than one external definition for int foo.
All translation units main.c, fooget.c, fooset.c and fooinc.c
provide an external definition of int foo. This violates 6.9 p5:
An external definition is an external declaration that is also a
definition of a function (other than an inline definition) or an
object.
If an identifier declared with external linkage is used in an
expression (other than as part of the operand of a sizeof or _Alignof
operator whose result is an integer constant), somewhere in the entire
program there shall be exactly one external definition for the
identifier; otherwise, there shall be no more than one.
Your linker will probably "fix" this, and merge all external
definitions into one, but if you want your program to be portable
you should not rely on this linker behaviour.
It would be cleaner to change the declaration 'int foo;'
in foo.h by 'extern int foo;', and add a new
translation unit, say foo.c, to contain the (single)
definition of int foo:
/* foo.c */
#include <foo.h>
int foo;
and link the object generated for foo.c to your program
along with the objects generated for main.c, fooget.c,
fooset.c and fooinc.c .
As for the foo.h.gch file, it's a precompiled header,
the result of compiling foo.h with gcc.
If you don't want this, don't compile foo.h,
use it only for inclusion by other *.c files.
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar
Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-03 19:13 +0100
Re: Who owns the variable in my header file ? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-10-03 15:05 -0400
Re: Who owns the variable in my header file ? pacman@kosh.dhis.org (Alan Curry) - 2012-10-03 19:17 +0000
Re: Who owns the variable in my header file ? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-10-03 15:55 -0400
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-03 20:59 +0100
Re: Who owns the variable in my header file ? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-10-03 16:32 -0400
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 08:50 +0100
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-04 01:30 -0700
Re: Who owns the variable in my header file ? Angel <angel+news@spamcop.net> - 2012-10-04 10:17 +0000
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 12:02 +0100
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-04 16:20 -0700
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-05 08:44 +0100
Re: Who owns the variable in my header file ? Chicken McNuggets <chicken@mcnuggets.com> - 2012-10-07 16:48 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-04 07:13 -0400
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-04 00:34 -0400
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 09:02 +0100
Re: Who owns the variable in my header file ? David Brown <david@westcontrol.removethisbit.com> - 2012-10-04 10:14 +0200
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-04 08:30 -0400
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 14:18 +0100
Re: Who owns the variable in my header file ? Nick Keighley <nick_keighley_nospam@hotmail.com> - 2012-10-06 02:30 -0700
Re: Who owns the variable in my header file ? Les Cargill <lcargill99@comcast.com> - 2012-10-06 08:01 -0500
Re: Who owns the variable in my header file ? Richard Damon <news.x.richarddamon@xoxy.net> - 2012-10-06 21:30 -0400
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-07 11:40 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-07 10:56 -0400
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-07 21:26 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-07 19:58 -0400
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-07 11:47 -0700
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-07 21:53 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-07 20:04 -0400
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-08 02:14 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-07 21:47 -0400
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-08 00:33 -0700
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-08 11:13 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-08 07:40 -0400
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-08 13:13 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-08 10:08 -0400
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-08 16:20 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-08 12:45 -0400
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-08 12:29 -0700
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-08 22:28 +0100
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-08 15:47 -0700
Re: Who owns the variable in my header file ? Richard Damon <news.x.richarddamon@xoxy.net> - 2012-10-07 21:16 -0400
Re: Who owns the variable in my header file ? Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2012-10-04 08:35 -0600
Re: Who owns the variable in my header file ? Ben Bacarisse <ben.usenet@bsb.me.uk> - 2012-10-04 22:31 +0100
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-05 08:58 +0100
Re: Who owns the variable in my header file ? gordonb.mhaw9@burditt.org (Gordon Burditt) - 2012-10-06 20:19 -0500
Re: Who owns the variable in my header file ? Ian Collins <ian-news@hotmail.com> - 2012-10-07 15:19 +1300
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-07 18:22 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-07 14:38 -0400
Re: Who owns the variable in my header file ? Kaz Kylheku <kaz@kylheku.com> - 2012-10-04 05:14 +0000
Re: Who owns the variable in my header file ? Kaz Kylheku <kaz@kylheku.com> - 2012-10-03 19:40 +0000
Re: Who owns the variable in my header file ? Ike Naar <ike@sverige.freeshell.org> - 2012-10-03 19:52 +0000
Re: Who owns the variable in my header file ? falk@rahul.net (Edward A. Falk) - 2012-10-03 22:36 +0000
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-03 16:21 -0700
Re: Who owns the variable in my header file ? falk@rahul.net (Edward A. Falk) - 2012-10-04 19:01 +0000
Re: Who owns the variable in my header file ? David Thompson <dave.thompson2@verizon.net> - 2012-10-11 03:09 -0400
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-11 13:30 -0700
Re: Who owns the variable in my header file ? Kaz Kylheku <kaz@kylheku.com> - 2012-10-04 01:43 +0000
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 09:24 +0100
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 11:23 +0100
Re: Who owns the variable in my header file ? David Brown <david@westcontrol.removethisbit.com> - 2012-10-04 13:26 +0200
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 15:52 +0100
Re: Who owns the variable in my header file ? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-10-04 11:40 -0400
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-04 17:00 +0100
Re: Who owns the variable in my header file ? hormelfree@gmail.com - 2012-10-04 17:15 -0700
Re: Who owns the variable in my header file ? Ike Naar <ike@iceland.freeshell.org> - 2012-10-05 06:51 +0000
Re: Who owns the variable in my header file ? David Brown <david@westcontrol.removethisbit.com> - 2012-10-05 09:35 +0200
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-05 09:11 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-05 08:04 -0400
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-04 08:43 -0400
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-04 16:08 -0700
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-05 09:27 +0100
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-05 02:16 -0700
Re: Who owns the variable in my header file ? Angel <angel+news@spamcop.net> - 2012-10-05 11:38 +0000
Re: Who owns the variable in my header file ? Nobody <nobody@nowhere.com> - 2012-10-05 16:13 +0100
Re: Who owns the variable in my header file ? Angel <angel+news@spamcop.net> - 2012-10-05 16:26 +0000
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-08 19:02 +0100
Re: Who owns the variable in my header file ? James Kuyper <jameskuyper@verizon.net> - 2012-10-08 14:29 -0400
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-08 20:15 +0100
Re: Who owns the variable in my header file ? Keith Thompson <kst-u@mib.org> - 2012-10-08 14:04 -0700
Re: Who owns the variable in my header file ? Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2012-10-08 22:47 -0600
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-09 09:04 +0100
Re: Who owns the variable in my header file ? "BartC" <bc@freeuk.com> - 2012-10-09 10:30 +0100
Re: Who owns the variable in my header file ? lipska the kat <lipskathekat@yahoo.co.uk> - 2012-10-09 11:48 +0100
csiph-web