在C语言中,static
变量的范围贯穿整个文件。
在以下代码中,函数返回静态变量。
int fun(){
static int i = 10;
return i;
}
int main() {
printf("%d\n", fun());
return 0;
}
并打印输出10。
那么,在C未定义的行为中返回本地静态还是定义明确?
答案 0 :(得分:8)
您似乎错过了return
语句的整个逻辑。
在这个片段中,您实际上是在返回值(变量的),因此,如果没有static
存储,代码就可以了。
如果您想要返回变量的地址,它需要比函数的范围更长。在这种情况下,您需要一个带有static
存储的变量,以便返回的地址有效(以便可以从调用函数中有意义地使用它),甚至在定义它的函数之外。所以,要么
malloc()
或family static
存储类定义的变量的地址。