如何在c中全局初始化变量,静态和外部有什么区别?

用户14261839

请向我解释如何在 C 中全局初始化变量范围以及静态和外部之间的区别

4386427

变量的作用域意味着:它在哪里可以被看到(也就是它在哪里存在),从而可以被访问。

变量的范围取决于它在代码中的定义位置。

变量在函数外部定义时获得全局作用域关键字static可以限制全局变量的范围,以便它只能在特定的 c 文件(又名编译单元)中看到。所以:

文件1.c

int gInt1;         // Global variable that can be seen by all c-files

static int gInt2;  // Global variable that can be seen only by this c-file

void foo(void)
{
    int lInt;  // Local variable 

    ...
}

为了使用另一个 c 文件中的全局变量,您告诉编译器它存在于某个其他文件中。为此,您使用extern关键字。

文件2.c

extern int gInt1;  // Now gInt1 can be used in this file

void bar(void)
{
    int n = gInt1 * (gInt1 + 1);

    ...
}

您经常将extern声明放入头文件中。像:

文件1.h

extern int gInt1;  // Any c-file that includes file1.h can use gInt1

文件2.c

#include "file1.h" // Now gInt1 can be used in this file

void bar(void)
{
    int n = gInt1 * (gInt1 + 1);

    ...
}

关于初始化

初始化全局变量与初始化局部变量没有区别。

全局变量和局部变量之间的唯一区别是没有初始化程序。在这种情况下,局部变量将保持未初始化,而全局变量将默认初始化(这通常意味着初始化为零)。

文件1.c

int gInt1 = 42;         // Global variable explicit initialized to 42

int gInt2;              // Global variable default initialized to 0

void foo(void)
{
    int lInt1 = 42;     // Local variable explicit initialized to 42

    int lInt2;          // Local variable uninitialized. Value is ??
    ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java中通过new String()和new String(“”)进行的String初始化之间有什么区别?

静态和非静态初始化代码块有什么区别

非初始化和初始化为null有什么区别?

快速初始化和便捷实例之间的便利初始化与初始化之间有什么区别

类C,构造函数和统一初始化之间有什么区别?

{x}和'= {x}'初始化之间有什么区别(如果有)?

全局变量和c中的#define有什么区别

在构造函数内外初始化实例变量之间有什么区别?

使用ori和addi在MIPS中初始化值之间有什么区别?

用=初始化和{}初始化之间有什么区别?

所需的初始化程序和指定的初始化程序有什么区别?

为什么在C和C ++之间初始化全局变量有这种区别?

Dart中的构造方法和初始化方法列表有什么区别?

应用程序初始化程序和ember中的服务有什么区别?

R S4初始化函数中的“ .Object”和“ object”有什么区别?

变量初始化有什么区别?

用C中的以下方式初始化struct有什么区别?

在.h文件中的类中声明静态变量和.cpp文件中的“全局”变量之间有什么区别?

在函数中返回指向被调用的int的指针和返回已初始化的int的地址之间有什么区别?

在C ++中,如何在类中初始化不可复制的静态成员变量?

C初始化程序元素不是常量[数组和变量之间有什么区别]

我如何在C ++中初始化静态指针?

初始化时静态引用变量和实例引用变量有什么区别?

C中的全局变量和动态分配的v变量有什么区别?

如何使用 gdb 跟踪在 main() 之前初始化的所有静态全局变量

在 C++ 中使用和不使用构造函数调用初始化对象有什么区别

“仅初始化设置器”提供了什么以及与 C# 中的只读设置有什么区别

在 C++11/17 中的类初始化和直接初始化中。有什么区别?

C++11/17 中 std::atomic 的间接和直接初始化。有什么区别?