zxcvbnmasdf 发表于 2021-11-6 16:01:00

文件作用域

本帖最后由 zxcvbnmasdf 于 2021-11-6 16:02 编辑

想问下各位大佬,函数和全局变量文件作用域是从声明位置开始到文件的结尾处,还是从定义位置开始从文件的结尾处

例如下面这个代码,func函数的作用域是从第3行对它的声明void func(void);开始到结尾,还是从下面17行定义func函数开始到结尾
还有全局变量count,因为上面第7行有用extern声明了count,所以count的作用域是在main函数中和下面15行定义int count;到结尾吗?



#include<stdio.h>

void func(void);

int main(void)
{
        extern int count;
        func();
        count++;
        printf("In main,count=%d\n",count);
       
        return 0;
}

int count;

void func(void)
{
        count++;
        printf("In func,count=%d\n",count);
}

人造人 发表于 2021-11-6 16:11:47

从声明位置开始

jackz007 发表于 2021-11-6 16:25:56

本帖最后由 jackz007 于 2021-11-6 16:30 编辑

      全局变量和函数一样,其作用域都是从定义(或声明)的位置开始,一直到本源代码文件结束,extern 定义的是外部变量,这个变量使用的是其他源代码文件中定义的同名全局变量。如果在函数中定义了与全局变量同名的变量,那么,这个变量只能是函数的同名局部变量,与全局变量毫无关系。

zxcvbnmasdf 发表于 2021-11-6 17:01:24

本帖最后由 zxcvbnmasdf 于 2021-11-6 17:03 编辑

jackz007 发表于 2021-11-6 16:25
全局变量和函数一样,其作用域都是从定义(或声明)的位置开始,一直到本源代码文件结束,extern...

但小甲鱼不是有说全局变量的声明和定义是不一样的,局部变量才既是定义又是声明,
像上面我发的代码,声明位置和定义位置就不一样,所以到底是从声明变量的位置开始,还是定义变量的位置开始?

jackz007 发表于 2021-11-6 17:54:29

本帖最后由 jackz007 于 2021-11-6 17:56 编辑

zxcvbnmasdf 发表于 2021-11-6 17:01
但小甲鱼不是有说全局变量的声明和定义是不一样的,局部变量才既是定义又是声明,
像上面我发的代码, ...

          声明只是在标识符使用在前,定义在后,或者,标识符的定义出现在其它文件中的时候,才是有必要的。至于说局部变量,你认为它有必要进行声明吗?

tomok 发表于 2021-11-6 19:08:07

进来学习。
页: [1]
查看完整版本: 文件作用域