当前位置:网站首页>Function of static

Function of static

2022-07-05 07:35:00 luoganttcc

C In language static The role of

classification Programming technology
stay C In language ,static It's easy to lead us astray , In fact, it has three functions .

(1) Let's introduce the first and most important one : hide .

When we compile multiple files at the same time , All without static Global variables and functions of prefixes have global visibility . To understand this sentence , Let me give an example . We need to compile two source files at the same time , One is a.c, The other is main.c.

Here is a.c The content of :
Code in git

a.c File code
char a = 'A'; // global variable
void msg()
{
    printf("Hello\n");
}

Here is main.c The content of :

main.c  File code 
int main(void)
{    
    extern char a;    // extern variable must be declared before use
    printf("%c ", a);
    (void)msg();
    return 0;
}

The result of the program running is :

A Hello

You may ask : Why is it a.c Global variables defined in a And the function msg Can be in main.c Use in ? As I said before , All without static Global variables and functions of prefixes have global visibility , Other source files can also be accessed . In this case ,a Global variable ,msg Is the function , And they didn't add static Prefix , So for another source file main.c Is visible .

If you add static, Will hide from other source files . For example, in a and msg Add before the definition of static,main.c You can't see them . With this feature, functions and variables with the same name can be defined in different files , You don't have to worry about naming conflicts .static Can be used as a prefix for functions and variables , For functions ,static The role of is limited to hiding , And for variables ,static There are also the following two functions .

(2)static The second function of is to keep the variable content persistent .

Variables stored in the static data area are initialized as soon as the program starts to run , It's also the only initialization . There are two types of variables stored in static storage : Global variables and static Variable , Just compared to global variables ,static You can control the visible range of variables , At the end of the day static Or for hiding . Although this usage is not common , But let me give an example .
#include <stdio.h>

int fun(void){
    
    static int count = 10;    //  In fact, this assignment statement has never been executed 
    return count--;
}

int count = 1;

int main(void)
{
        
    printf("global\t\tlocal static\n");
    for(; count <= 10; ++count)
        printf("%d\t\t%d\n", count, fun());    
   
    return 0;
}

The result of the program running is :

global          local static

1               10

2               9

3               8

4               7

5               6

6               5

7               4

8               3

9               2

10              1
(3)static The third function of is default initialization to 0. In fact, global variables also have this property , Because global variables are also stored in the static data area . In the static data area , The default value of all bytes in memory is 0x00, Sometimes this feature can reduce the workload of programmers . For example, initialize a sparse matrix , We can set all the elements one by one 0, And then put it not 0 Assign values to several elements of . If defined as static , It eliminates the need to start with 0 The operation of . Another example is to use a character array as a string , But I think every time I add... At the end of the character array ’\0’ too troublesome . If you define a string as static , It saves the trouble , Because it was ’\0’. You might as well do a small experiment to verify .
#include <stdio.h>

int a;

int main(void)
{
    
    int i;
    static char str[10];

    printf("integer: %d; string: (begin)%s(end)", a, str);

    return 0;
}

The program runs as follows
integer: 0; string: (begin)(end)

Finally, static Make a one sentence summary of the three functions of . First static The main function of is to hide , Second, because static Variables are stored in static storage , So it has persistence and default values 0.

static The role of

原网站

版权声明
本文为[luoganttcc]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/186/202207050733369469.html