我是一名学生,对C和C++中的全局变量和文件作用域变量感到困惑。这两种变量在不同方面是否有区别?如果有,请详细解释。
我是一名学生,对C和C++中的全局变量和文件作用域变量感到困惑。这两种变量在不同方面是否有区别?如果有,请详细解释。
具有文件作用域的变量可被单个文件中的任何函数或块访问。要声明具有文件作用域的变量,只需在块之外声明一个变量(与全局变量相同),但使用静态关键字。
static int nValue; // file scoped variable
float fValue; // global variable
int main()
{
double dValue; // local variable
}
文件范围变量的行为与全局变量完全相同,唯一的限制是它们只能在声明它们的文件中使用。
float global_var = 1.0f;
static float static_var = 2.0f;
main.cpp
#include <cstdio>
extern float global_var;
//extern float static_var; // compilation error - undefined reference to 'static_var'
int main(int argc, char** argv)
{
printf("%f\n", global_var);
}
static int nValue; // file scoped variable
float fValue; // global variable
int main()
{
double dValue; // local variable
}
Read more here.
文件作用域: 任何声明在所有代码块或类之外的名称都具有文件作用域。在声明后,在翻译单元的任何地方都可以访问它。没有声明静态对象的文件作用域名称通常称为全局名称。
在C++中,文件作用域也称为命名空间作用域。
仔细阅读。
在程序/代码顶部使用#include<'...'.h>语句,这实际上是告诉计算机在那些头文件中引用预写的函数。也就是说,这些函数具有文件作用域,你不需要编写printf scanf等函数的代码,因为它们在头文件中。
在函数外声明的变量具有“文件作用域”,这意味着它们在文件内可见。具有文件范围的变量在声明和编译单元(.c文件)的末尾之间可见,并且它们隐式具有外部链接性,因此它们不仅对包含其声明的.c文件或编译单元可见,而且对于链接以形成完整程序的每个其他编译单元也可见。
全局变量可以被认为是全局(到处)可访问的。