C语言中的变量定义和内存分配
作为C的初学者,我想知道对于同一变量的双重定义,内存分配的结果是什么,即: 第一个文件:file.hC语言中的变量定义和内存分配,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在一个函数中,它会很好,随着时间的推移,它将成为该函数的局
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中的多个定义也未定义。