C中的变量定义和内存分配
Variable definition and memory allocation in C
作为C初学者,我想知道同一个变量的双重定义的内存分配结果是什么,即:
第一个文件:file.h
int data;
第二个文件:main.c
#include "file.h"
...
int data = 56;
...
第 1 点 #include file.h
是错误的。你至少需要写 #include "file.h"
第2点。这个概念本身也是错误的,因为这两个变量都是全局的space。它会给你多重定义错误。
注意:但是,如果你在一个函数里面做int data = 56;
,就可以了,因为那个时候,它会变成一个局部变量到那个功能。
此外,我建议阅读一些有关 include guard 的内容。否则,如果您在头文件中 定义 变量,则在源文件中多次包含头文件也会产生多重定义错误。
最佳实践:
- 在头文件中声明变量。 [
extern int data;
]
- 定义(其中一个)源文件中的变量。 [
int data = 56;
/ int data;
]
如果你想双重声明一个变量,使用
extern int data;
在 file.h
.
更多关于 extern
variables 的内容。
另外,#include file.h
写错了,请写成"#include "file.h"
。
其实两者是一样的
int data;
1. 在这里你声明了一个整型变量而不初始化它的值。
#include file.h
...
int data = 56;
...
- 在这里你声明了一个没有初始化的整型变量。
因为变量数据的两个声明都在同一个 file.so 上,所以会显示错误。
一个变量不能在同一个文件(作用域)中声明两次。
作为C初学者,我想知道同一个变量的双重定义的内存分配结果是什么,即:
第一个文件:file.h
int data;
第二个文件:main.c
#include "file.h"
...
int data = 56;
...
第 1 点 #include file.h
是错误的。你至少需要写 #include "file.h"
第2点。这个概念本身也是错误的,因为这两个变量都是全局的space。它会给你多重定义错误。
注意:但是,如果你在一个函数里面做int data = 56;
,就可以了,因为那个时候,它会变成一个局部变量到那个功能。
此外,我建议阅读一些有关 include guard 的内容。否则,如果您在头文件中 定义 变量,则在源文件中多次包含头文件也会产生多重定义错误。
最佳实践:
- 在头文件中声明变量。 [
extern int data;
] - 定义(其中一个)源文件中的变量。 [
int data = 56;
/int data;
]
如果你想双重声明一个变量,使用
extern int data;
在 file.h
.
更多关于 extern
variables 的内容。
另外,#include file.h
写错了,请写成"#include "file.h"
。
其实两者是一样的
int data;
1. 在这里你声明了一个整型变量而不初始化它的值。
#include file.h
...
int data = 56;
...
- 在这里你声明了一个没有初始化的整型变量。 因为变量数据的两个声明都在同一个 file.so 上,所以会显示错误。 一个变量不能在同一个文件(作用域)中声明两次。