问题我在不少 C 语言程序中见到 static 这个关键词,这和 C# 中的 static 含义一样么?谁可以解释一下?

回答函数内静态变量在多次调用时都可以保留其值。

代码语言:javascript复制#include

void foo()

{

int a = 10;

static int sa = 10;

a += 5;

sa += 5;

printf("a = %d, sa = %d\n", a, sa);

}

int main()

{

int i;

for (i = 0; i < 10; ++i)

foo();

}输出如下,

代码语言:javascript复制a = 15, sa = 15

a = 15, sa = 20

a = 15, sa = 25

a = 15, sa = 30

a = 15, sa = 35

a = 15, sa = 40

a = 15, sa = 45

a = 15, sa = 50

a = 15, sa = 55

a = 15, sa = 60一个静态全局变量只对本编译单元可见。

假如有两个 c 文件,

代码语言:javascript复制#include "a.h"

int a;

void func_a()

{

}代码语言:javascript复制#include "b.h"

int a;

void func_b()

{

}直接这样编译,那么两个编译单元在链接的时候就会变量 a 重定义报错。

而如果在其中一个 c 文件里将变量 a 设置为 static 类型,就会避免这个报错,因为 static 全局变量是内部链接属性。

Copyright © 2088 2017乒乓球世界杯_世界杯体彩 - uzhiqu.com All Rights Reserved.
友情链接