📜  C测验– 111 |问题2

📅  最后修改于: 2021-05-26 01:00:37             🧑  作者: Mango

为以下程序段选择最佳的语句:

#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基础课程》。