我正在学习 ANSI C 编程语言,其中在介绍中提到:
“局部变量通常是‘自动的’,或者说在每次调用时都会被重新创建。”
我猜分配和释放变量是使用 Java 的堆栈帧逻辑。那么全局变量也是自动的吗?它们进入和离开堆栈帧的次数比局部变量少得多,因为它们在整个 .c 文件的范围内。
“局部变量通常是‘自动的’,或者说在每次调用时都会被重新创建。”
我猜分配和释放变量是使用 Java 的堆栈帧逻辑。那么全局变量也是自动的吗?它们进入和离开堆栈帧的次数比局部变量少得多,因为它们在整个 .c 文件的范围内。
static
、register
(或extern
)关键字在函数内定义的变量是auto
变量。理论上,它们可以加上关键字auto
。如果你真的添加了这个关键字,那么你应该被枪毙(C++已经完全接管了它,用于完全不同的目的)。如果你在生产环境中遇到了这个关键字,你应该把写下auto
的人带到后面的小屋子里让他悔过。 - Jonathan Lefflerauto
创建全局变量是不可能的。存储类auto
排除了变量成为全局变量的可能性;而变量成为全局变量则排除了它成为auto
变量的可能性。(在标准C中,使用存储类register
创建全局变量也是不可能的;register
排除了全局变量的可能性,反之亦然。) - Jonathan Leffler