c语言完美演绎9-5

/* 范例:9-5 */

#include "file_a.cpp"

int b1; /* 全局自动初值0 */

void pp(void)

{

extern int a;

extern int c;

int b=3;

extern int varb_file_b; /* 定义于file_b,于file_a有include */

printf("a=%d varb_file_b=%d\n",a,varb_file_b);

{

extern int b1; /* 直接找文件全局 */

extern int b; /* 定义于file_a.cpp中已被展开 */

printf("b1=%d b=%d\n",b1,b);

{

extern int c;

::b1++; /* 全局b1=b1+1 (C++的运算符) */

/* ::c++; */ /* error! 变量c 未定义 */

printf("c=%d b1=%d\n",c,b1);

}

}

printf("重新声明为extern的c=%d\n",++c);

}

/* int a=1; */ /* error! 造成重复定义(已在file_a.cpp中定义过) */

int c=789;

int main(void)

{

extern int a; /* 重新声明file_a.cpp内变量a */

a++;

extern int a; /* 即使同一生命范围,也可以重新声明 */

static int b=3;

printf("a=%d b=%d\n",a,b); /* 输出为外部文件的变量a */

pp();

{

int a=33;

printf("%d\n",a); /* 局部a产生屏蔽效应,此时看不到外部变量a */

{

static int b; /* b=0 */

extern int a;

a++; /* a 定义于file_a.cpp */

printf("%d %d\n",a,b);

}

}

printf("未重新声明为extern的c=%d\n",++c);

getchar();

return 0;

}

程序执行结果:

a=6 b=3

a=6 varb_file_b=123

b1=0 b=10

c=789 b1=1

有重新声明为extern的c=790

33

7 0

未重新声明为extern的c=791