为以下程序段选择最佳的语句:
#include "stdio.h"
void foo(void)
{
static int staticVar;
staticVar++;
printf("foo: %d\n",staticVar);
}
void bar(void)
{
static int staticVar;
staticVar++;
printf("bar: %d\n",staticVar);
}
int main()
{
foo(), bar(), foo();
return 0;
}
(A)编译错误,因为在foo和bar中都使用了相同的静态变量名称。由于这些静态变量即使在函数结束后仍保留其值,因此两个函数不能使用相同的名称。
(B)编译错误,因为在侧面main函数调用foo()和bar()时未使用分号。
(C)没有编译错误,并且两个函数只能使用一个staticVar副本,这就是为什么单个staticVar的最终值为3的原因。
(D)没有编译错误,并且在两个函数中将使用staticVar的单独副本。这就是为什么foo()中的staticVar为2而bar()中的staticVar为1的原因。答案: (D)
说明:在这里,即使静态变量的寿命跨越函数调用,但它们的范围仅与函数主体有关。这就是每个函数的staticVar具有单独副本的原因,这些副本的寿命跨多个函数调用。 d是正确的。
这个问题的测验
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。