b1.c ==== #include /* gcc -ansi -c b*.c => b1.o, b2.o, b3.o gcc -ansi -o b b*.o => b The order of object files for the link command has no significance */ extern int a, b; int a = 5; /* global variable a */ int b = 2; /* global variable b - can be accesed from any file */ void f1(void); void f2(void); main() { f1(); f2(); printf("\nFrom main: a = %d b = %d\n", a, b); } Output: ======= %b From f1: a = 5 b = 2 From f2: a = 5 b = 2 From main: a = 5 b = 2 b2.c ==== #include /* int a = 9; This second global declaration of the same variable a causes the link error: multiple declaration of a */ /* extern int a = 9; It is invalid to (default) initialize a variable that has been declared elsewhere */ extern int a; void f1(void) { extern b; printf("\nFrom f1: a = %d b = %d\n", a, b); } b3.c ==== #include void f2(void) { extern a, b; printf("\nFrom f2: a = %d b = %d\n", a, b); }