当前位置:网站首页>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.
边栏推荐
- Exit of pyGame, idle and pycharm
- Using GEE plug-in in QGIS
- Miracast技术详解(一):Wi-Fi Display
- Efficiency difference: the add method used by the set directly and the add method used by the set after judgment
- 借助 Navicat for MySQL 软件 把 不同或者相同数据库链接中的某数据库表数据 复制到 另一个数据库表中
- II Simple NSIS installation package
- Line test -- data analysis -- FB -- teacher Gao Zhao
- arcpy. SpatialJoin_ Analysis spatial connection analysis
- Differences between pycharm and idle and process -- join() in vs Code
- 2022 PMP project management examination agile knowledge points (7)
猜你喜欢

Word import literature -mendeley

Miracast技术详解(一):Wi-Fi Display

2022 PMP project management examination agile knowledge points (7)

Jenkins reported an error. Illegal character: '\ufeff'. Class, interface or enum are required

Unforgettable summary of 2021

P3D gauge size problem

Pagoda create multiple sites with one server

The number of occurrences of numbers in the offer 56 array (XOR)

Close of office 365 reading

Line test -- data analysis -- FB -- teacher Gao Zhao
随机推荐
What is deep learning?
2022.06.27_ One question per day
Deepin get file (folder) list
氫氧化鈉是什麼?
cygwin
Idea push project to code cloud
What is Bezier curve? How to draw third-order Bezier curve with canvas?
Database SQL practice 4. Find the last of employees in all assigned departments_ Name and first_ name
Self summary of college life - freshman
行测--资料分析--fb--高照老师
公安专业知识--哔哩桐老师
Apple script
数字孪生实际应用案例-风机篇
Idea shortcut key
Basic series of SHEL script (I) variables
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
[MySQL] database knowledge record
HDU1231 最大连续子序列(分治or动规or双指针)
Deepin, help ('command ') output saved to file
Efficiency difference: the add method used by the set directly and the add method used by the set after judgment