BaysideLizard 发表于 2023-11-15 22:19:51

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]
查看完整版本: S1E32:作用域和链接属性