鱼C论坛

 找回密码
 立即注册
查看: 1224|回复: 0

[作品展示] S1E32:作用域和链接属性

[复制链接]
发表于 2023-11-15 22:19:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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的第十六天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表