Elija la mejor afirmación para el siguiente fragmento de programa:
#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) Error de compilación porque se usa el mismo nombre de variable estática tanto en foo como en bar. Dado que estas variables estáticas conservan sus valores incluso después de que finaliza la función, no se puede usar el mismo nombre en ambas funciones.
(B) Error de compilación porque el punto y coma no se usa al llamar a foo() y bar() en la función principal lateral.
(C) No hay error de compilación y solo se usaría una copia de staticVar en ambas funciones y es por eso que el valor final de ese único staticVar sería 3.
(D) No hay error de compilación y se usarían copias separadas de staticVar en ambas funciones . Es por eso que staticVar en foo() sería 2 mientras que staticVar en bar() sería 1.
Respuesta: (D)
Explicación: aquí, aunque la vida de las variables estáticas se extiende a lo largo de las llamadas a funciones, su alcance es respectivo solo al cuerpo de la función. Es por eso que staticVar de cada función tiene copias separadas cuya vida útil se extiende a través de las llamadas a funciones. Y d es correcta.
Cuestionario de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA