Answer SL31


entering main x: 10
  entering extern bar x: 10
  exiting  extern bar x: 20
    entering foo.
      static bar.
    exiting foo.
exiting main x: 40

Comments: Declaring a function static enables you to use a name that might otherwise conflict with the name of a function in another file.

The function name bar in fileB.c is not external, (because static gives it internal linkage), so is not linked ot the bar that main uses.


/* --- fileA.c --- */
int x = 10;

/* --- fileB.c --- */
#include <stdio.h>
int x;

static int bar(int val)
{
  printf("      static bar.\n");
  return 2*val;
}

void foo()
{
  printf("    entering foo.\n");
  x = bar(x);
  printf("    exiting foo.\n");
}

/* --- fileC.c --- */
#include <stdio.h>
void foo();

int x;

void bar()
{
  printf("  entering extern bar x: %d\n", x);
  x += 10;
  printf("  exiting  extern bar x: %d\n", x);
}

void main()
{
  printf("entering main x: %d\n", x );
  bar();
  foo();
  printf("exiting main x: %d\n", x );
 
}



Back to Puzzle Home