extern question

Trevis Rothwell tjr@gnu.org
Tue Jun 6 13:50:00 GMT 2006


Given the files:

/* main.c */
#include <stdio.h>

extern void foo (void);
extern void bar (void);

extern int larry;

int main (void) {
  printf ("inside main: %d\n", larry);
  foo();
  bar();

  return 0;
}

/* foo.c */
int larry = 42;

extern void foo (void) {
  printf ("inside foo: %d\n", larry);
  return;
}

/* bar.c */
int larry;

extern void bar (void) {
  printf ("inside bar: %d\n", larry);
  return;
}

...

Compiling and linking all of these together generates a program which
gives the following output:

inside main: 42
inside foo: 42
inside bar: 42

...

If I add a variable definition to bar.c (so that "larry" is given a
value in both foo.c and bar.c) then the compiler complains that the
variable is defined more than once, which is true.  But, my question
is:  should I even be allowed to declare "larry" in both foo.c and
bar.c ?  If so, why is that not seen as a problem?

Thanks!

 -- Trevis Rothwell



More information about the Gcc-help mailing list