简体   繁体   中英

How to globaly initialize variable in c and what is the difference between static and extern?

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

The scope of variable means: Where can it be seen (aka where does it exist) and thereby be accessed.

The scope of a variable depends on where in the code it is defined.

A variable gets global scope when it is defined outside a function. The keyword static can limit the scope of a global variable so that it can only be seen in that particular c-file (aka compilation unit). So:

file1.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 

    ...
}

In order to use a global variable from another c-file, you tell the compiler that it exists in some other file. For this you use the extern keyword.

file2.c

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

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

    ...
}

You often put the extern declaration into a header file. Like:

file1.h

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

file2.c

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

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

    ...
}

Regarding initialization

Initializing a global variable is no different from initializing a local variable.

The only difference between global and local variables is when you do not have an initializer. In such cases a local variable will be left uninitialized while global variables will be default initialized (which typically means initialized to zero).

file1.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 ??
    ...
}

To Declare a variable of global scope ,just declare it outside all functions.

Intial value -0.

Scope of Global variable: It can be used in all functions and files.

Life- Till Program execution.

Use of extern keyword :

If you declared a global variable in a file and want to use it in another file then extern keyword is used.

int x=5;        //source file

extrern int x=10;   //any other file

Another use of extern keyword is if the golbal variable is used before declaration in program. example:

void main()
{
 int x
 extern int y;
 x=y;
} 
int y=5;

Static varialbe:

intial value-0

scope- Till control remain in block,function or file.

Life -Till Program execution.

void main()
{
fun();
fun();
fun();
}
void fun()
{
int x=0;
x++;
}

After Program ends x=3.

Static Variable can also be used as global variable and declared outside all functions but the scope remain in the file in which it is defined. example:

static int x=2;
int main()
{
 x=5;
}

That's all!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM