在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变量只能初始化一次。

链接地址: http://www.djcxy.com/p/82499.html

上一篇: Does Declaring a Global Variable in C Alter the Entry Point?

下一篇: How global pointer variables are stored in memory?