1、static修饰局部变量 ---->静态局部变量

  • 存储期:静态局部变量的存储期为整个程序运行期间,而不是仅在函数调用期间。
  • 作用域:仍然局限于定义它的函数内部,其他函数不能访问。
#include <stdio.h>

void func() {
    static int count = 0; // 静态局部变量
    count++;
    printf("count = %d\n", count);
}

int main() {
    func(); // 输出 count = 1
    func(); // 输出 count = 2
    return 0;
}
xuanmiao@linux:~/Test$ ./test 
count = 1
count = 2

 

静态局部变量被函数值传递返回,函数外部不能修改静态局部变量!

#include <stdio.h>

int function()
{
    static int count = 0;
    printf("function : before count is %d \r\n",count);
    count++;
    printf("function : after count is %d \r\n",count);
    return count;
}

int main()
{   
    int count = 0;
    count = function();
    count ++;
    printf("main:count is %d \r\n",count);
    count = function();
    count = function();
    printf("main:count is %d \r\n",count);
}
xuanmiao@linux:~/Test/C$ ./test1 
function : before count is 0 
function : after count is 1 
main:count is 2 
function : before count is 1 
function : after count is 2 
function : before count is 2 
function : after count is 3 
main:count is 3 

 

2、static修饰全局变量 ---->静态全局变量

  • 作用域:静态全局变量只能在定义它的源文件中使用,不能被其他源文件访问
#include <stdio.h>

static int globalVar = 10; // 静态全局变量

void printGlobalVar() 
{
    printf("file1.c  globalVar = %d\n", globalVar);
}
#include <stdio.h>

extern int globalVar; // 尝试访问file1.c中的globalVar

int main() 
{
    printf("file2.c  globalVar = %d\n", globalVar); // 错误:globalVar未定义
    return 0;
}
xuanmiao@linux:~/Test$ gcc file1.c file2.c -o file
/usr/bin/ld: /tmp/ccxTEwXg.o: in function `main':
file2.c:(.text+0xa): undefined reference to `globalVar'
collect2: error: ld returned 1 exit status

 

3、static修饰函数---->静态函数

  • 作用域:静态函数仅作用于定义它的源文件
#include <stdio.h>

static void staticFunc() 
{ // 静态函数
    printf("This is a static function.\n");
}

void callStaticFunc() 
{
    staticFunc(); // 正常调用
}
#include <stdio.h>

extern void callStaticFunc();
extern void staticFunc(); // 尝试声明file1.c中的静态函数

int main() 
{
    callStaticFunc(); // 正常调用
    staticFunc(); // 错误:staticFunc未定义
    return 0;
}
xuanmiao@linux:~/Test$ gcc file3.c file4.c -o file
/usr/bin/ld: /tmp/ccWI889u.o: in function `main':
file4.c:(.text+0x18): undefined reference to `staticFunc'
collect2: error: ld returned 1 exit status
posted on 2025-04-20 19:55  轩~邈  阅读(18)  评论(0)    收藏  举报