S1E32:作用域和链接属性
#include <stdio.h>//鱼C论坛——BaysideLizard写于2023年11月15日
/*
C语言编译器可以确认4种不同类型的作用域:
--代码块作用域
--文件作用域
--原型作用域
--函数作用域:goto语句的标签只在一个函数内部生效。
*/
void fun(void);
//文件作用域,函数名字从这里到文件结尾起作用。
int add(int x,int y);//原型作用域,这里的x,y可以与下面函数形参不一样。
int main()
{
int a,b;
int i = 100;//代码块i1
{
int i = 101;//代码块i2
{
int i = 102;//代码块i3
printf("i = %d\n",i);
}
//i = 101
{
printf("i = %d\n",i);
int i = 103;//代码块i4
printf("i = %d\n",i);
}
printf("i = %d\n",i);
}
printf("i = %d\n",i);
fun();
extern int count;
count++;
printf("In main,count = %d\n",count);
printf("Please input a b:");
scanf("%d %d",&a,&b);
printf("%d + %d = %d",a,b,add(a,b));
return 0;
}
int count;
//文件作用域,全局变量count从这里到文件结尾起作用。
void fun(void)
{
count++;
printf("In fund,count = %d\n",count);
}
int add(int a,int b)
{
int res;
res = a + b;
return res;
}
/*定义和声明:
定义:该变量还没有,定义只能来一次。
声明:该变量已经被定义了,声明可以有很多次。
特别的:局部变量既是定义又是声明。
*/
/*链接属性:
·external(外部的)
--多个文件中声明的同名标识符表示同一个实体。
·internal(内部的)
--单个文件中声明的同名标识符表示同一个实体。
·none(无)
--声明的同名标识符被当作独立不同的实体。
只有具备文件作用域的标识符才能拥有external或internal的链接属性,
其他作用域的标识符都是none属性。
具备文件作用域的标识符默认拥有external属性。
*/
/*
使用static关键字可以使得原先拥有external属性的标识符变为internal属性。
--只对具有文件作用域的标识符生效。
--只能修改一次,改成internal就改不回external了。
*/
运行结果:
i = 102
i = 101
i = 103
i = 101
i = 100
In fund,count = 1
In main,count = 2
Please input a b:8 9
8 + 9 = 17
Process returned 0 (0x0) execution time : 3.972 s
Press any key to continue.
在FishC学C的第十六天
页:
[1]