C语言中的变量定义和内存分配

C语言中的变量定义和内存分配,c,memory,allocation,definition,C,Memory,Allocation,Definition,作为C的初学者,我想知道对于同一变量的双重定义,内存分配的结果是什么,即: 第一个文件:file.h int data; 第二个文件:main.c #include "file.h" ... int data = 56; ... 第1点#include file.h错误。您需要至少编写#包括“file.h” 第2点。这个概念本身也是错误的,因为这两个变量都在全局空间中。它将给您多个定义错误 注意:但是,如果您执行int data=56在一个函数中,它会很好,随着时间的推移,它将成为该函数的局

作为C的初学者,我想知道对于同一变量的双重定义,内存分配的结果是什么,即:

第一个文件:file.h

int data;
第二个文件:main.c

#include "file.h"
...
int data = 56;
...
第1点<代码>#include file.h错误。您需要至少编写
#包括“file.h”

第2点。这个概念本身也是错误的,因为这两个变量都在全局空间中。它将给您多个定义错误

注意:但是,如果您执行
int data=56在一个函数中,它会很好,随着时间的推移,它将成为该函数的局部变量

另外,我建议你读一些关于。否则,如果在头文件中定义变量,则在源文件中多次包含头文件也将生成多个定义错误

最佳做法:

  • 声明头文件中的变量。[
    外部内部数据;
    ]
  • 定义源文件中的变量。[
    int-data=56;
    /
    int-data;
    ]
如果要双重声明变量,请使用

extern int data;
文件.h

更多关于我的东西


而且,
#include file.h
是错误的,请写
“#include”file.h
,实际上两者是相同的。
int data;
1。在这里,您声明的是一个整数变量,而没有初始化它的值

#include file.h
...
int data = 56;
...
  • 在这种情况下,您将声明一个整数变量,而无需初始化。 因为变量数据的两个声明都在同一个文件中。所以它将显示错误。 一个变量不能在同一个文件(作用域)中声明两次

  • 这是行不通的,因为您要两次声明变量。这甚至可以编译吗?这与在
    main
    中使用
    int data;int data=56;
    是一样的,这是无效的,因为在同一范围内不能有多个同名变量。而且
    #include file.h
    是错误的。在所示的示例中,没有发生任何有趣的事情默认情况下,0的隐式初始化稍后会被显式初始化覆盖。一旦程序的另一个文件包含文件.h,这可能会导致多定义错误(取决于编译器和链接器,C标准会呈现未定义的文件).TL;DR:不要将这样的定义放在标题中,而是使用
    extern int data;
    。允许使用多个暂定定义;显示的标题可以包含多次(通过同一文件),但不是由多个源文件提供的,而且包含卫士并不能阻止这种情况。@mafso是的。这就是为什么我提到了最佳实践案例。我不质疑“最佳实践”,但1)“它会给您多个定义错误。”。“--仅当包含在多个文件中并且仍然依赖于编译器和链接器时,例如,Linux上的Gcc才会接受它。2) “否则,如果在头文件中定义变量,则在源文件中多次包含头文件也会生成多个定义错误。”--这是错误的,并且会产生误导。@因此,如果我错了,请纠正我,但我相信这与显式初始化有关。如果在头文件中写入
    int data=5则所有案例都将生成数据重新定义错误。不是吗?对于可移植C代码:隐式初始化(“暂定定义”)可能会被同一翻译单元中的显式初始化覆盖。多个显式初始化未定义,不在同一TU中的多个定义也未定义。