C语言中static的作用

在 C 语言中,`static` 是一个多用途的关键字,用于不同的情况和上下文。下面是一些常见的用法和示例:

**1. 静态变量(Static Variables)**
静态变量是在函数内部或模块(文件)作用域内声明的变量,其生命周期与程序的执行周期相同,而不是每次函数调用时重新初始化。静态变量默认情况下具有内部链接(Internal Linkage),只能在声明它的源文件中访问。

函数内部的静态变量示例:
```c
void foo() {
    static int count = 0;  // 静态变量
    count++;
    printf("Count: %d\n", count);
}

int main() {
    foo();  // 输出 Count: 1
    foo();  // 输出 Count: 2
    foo();  // 输出 Count: 3
    return 0;
}
```

模块作用域的静态变量示例:
```c
// File1.c
static int globalVar = 10;  // 静态变量,只能在当前源文件中访问

// File2.c
extern int globalVar;  // 引用其他源文件中的静态变量

int main() {
    printf("Global Variable: %d\n", globalVar);  // 输出 Global Variable: 10
    return 0;
}
```

**2. 静态函数(Static Functions)**
静态函数是在函数或模块作用域内声明的函数,其作用域限定在声明它的源文件中,无法被其他源文件直接调用。静态函数默认具有内部链接(Internal Linkage)。

函数内部的静态函数示例:
```c
void foo() {
    static void bar() {  // 静态函数
        printf("Inside bar()\n");
    }

    bar();
}

int main() {
    foo();  // 输出 Inside bar()
    return 0;
}
```

模块作用域的静态函数示例:
```c
// File1.c
static void helper() {  // 静态函数,只能在当前源文件中调用
    printf("Inside helper()\n");
}

// File1.c 或其他源文件
int main() {
    helper();  // 编译错误,无法调用静态函数
    return 0;
}
```

**3. 静态全局变量(Static Global Variables)**
静态全局变量是在模块作用域内声明的全局变量,其作用域限定在声明它的源文件中,无法被其他源文件直接访问。静态全局变量默认具有内部链接(Internal Linkage)。

```c
// File1.c
static int globalVar = 10;  // 静态全局变量,只能在当前源文件中访问

// File2.c
extern int globalVar;  // 引用其他源文件中的静态全局变量

int main() {
    printf("Global Variable: %d\n", globalVar);  // 输出 Global Variable: 10
    return 0;
}
```

**4. 静态常量(Static Constants)**
静态常量是在函数内部、模块作用域内或全局作用域内声明的常量,其值在编译时确定,并在整个程序执行期间保持不变。静态常量默认具有内部链接(Internal Linkage)。

函数内部的静态常量示例:
```c
void foo() {
    static const int MAX_VALUE = 100;  // 静态常量
    printf("Max Value: %d\n", MAX_VALUE);
}

int main() {
    foo();  // 输出 Max Value: 100
    return 0;
}
```

模块作用域的静态常量示例:
```c
// File1.c
static const double PI = 3.14159;  // 静态常量,只能在当前源文件中访问

// File2.c
extern const double PI;  // 引用其他源文件中的静态常量

int main() {
    printf("PI: %f\n", PI);  // 输出 PI: 3.141590
    return 0;
}
```

以上是 `static` 关键字在 C 语言中的一些常见用法和示例。它可以用于静态变量、静态函数、静态全局变量和静态常量,提供了限定作用域、具有内部链接和保持共享状态的机制。

请注意,`static` 的具体语义和用法可能会在不同的上下文中有所不同,具体取决于其所应用的位置和语义。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值