在C中声明全局变量是否改变了入口点?
以这个例子。
#include "stdio.h"
int global_var=5;
int main ()
{
int local_var=6;
//some statements
return 0;
}
如果主函数是唯一的入口点,那么global_var
的声明和赋值global_var
发生?
在相关说明中, global_var
分配在堆还是堆栈中的? 另外,是否有办法从函数声明全局变量,同时尊重入口点?
从概念上讲,全局变量的初始化发生在输入main
之前。 在这里,我假设你的所有代码都被编译在一个翻译单元中:更正式地说,一个全局变量在定义该全局变量的翻译单元中定义的任何函数出现之前立即被初始化。 (尽管如果没有副作用,编译器可以优化这一点)。
C和C ++都没有在他们的标准中提到堆或栈:它们是实现概念,而不是语言概念。
所以global_var
可以分配在一个堆上,但它可能是在main
被输入之前设置的某种堆栈上。
在函数内部没有办法声明全局变量。 函数中的static
变量可以模拟全局变量的大部分行为,但在概念上, static
在第一次遇到函数时被初始化。
全局变量的初始化发生在进入main
。
不,你不能在任何函数中声明全局变量。 如果你在函数内声明了任何变量,那么该变量的范围将仅限于该函数。 您可以尝试使用static
变量来实现您的目标,而不是全局变量。
全局变量既不以堆栈也不以堆存储。 每个程序(可执行代码)通常分为四个部分。
Code
Data
Stack
Heap
全局变量连同常量/文字存储在数据部分。 来源:变量存储在内存中的位置?
PS: static
变量只能初始化一次。
上一篇: Does Declaring a Global Variable in C Alter the Entry Point?