C语言中auto与static变量作用域疑问:为何此代码可正常运行?
关于auto变量作用域的疑问解答
为什么你的代码能正常运行?
你对auto变量的特性理解没错:auto变量(函数内定义的局部变量默认就是auto,写不写auto关键字效果一致)的作用域仅限于定义它的函数内部,且每次函数调用时都会重新分配内存,函数执行结束后内存被释放,不会保留上一次调用的值。
但你的代码里,sum()函数每次被调用时,都主动给a和b赋了确定的值(a = 91; b = 7;),根本不需要依赖变量的保留值。不管a和b是auto还是static,只要每次调用都重新赋值,运行结果都会是一样的,所以代码能正常执行完全符合C语言规则。
什么时候需要用static?
只有当你需要变量在函数多次调用之间保留之前的值时,才需要使用static关键字。比如下面的计数场景:
void count(void) { static int num = 0; num++; printf("当前计数:%d\n", num); } int main() { count(); // 输出:当前计数:1 count(); // 输出:当前计数:2 count(); // 输出:当前计数:3 return 0; }
这里static修饰的num会在函数多次调用之间保留值,而如果换成auto,每次调用num都会被重新分配内存(未显式赋值时是随机值),每次调用都会输出1或者随机数,无法实现累计计数的效果。
总结
你的代码里a和b完全不需要定义成static,因为你每次调用sum()都直接给它们赋了确定的值,auto变量的特性已经完全满足需求,代码运行正常是合理的。
内容的提问来源于stack exchange,提问作者Rithvik
相关产品推荐
相关产品推荐

