。h头文件怎么写

时间:2020-12-16 23:44:48
书上说变量的声明要写在点h文件中,定义写在cpp文件,可以避免被多个文件包含发生重定义错误。
但是不知道变量的声明是个什么东西,int a;算声明还是定义呢?

我用2个cpp包含下面这个点h文件

int a;  //重定义
int b = 1; //重定义
static int c; //可以


上面的int a,int b =1;和static int c不一样是定义吗?

把变量声明写在.h文件 到底要怎么写呢?

6 个解决方案

#1


int a;算声明还是定义呢? --》定义,因为定义会分配内存。
上面的int a,int b =1;和static int c不一样是定义吗? --》都是定义,作用域也一样。
声明用extern.如extern int a;
然后在你使用a的.cpp or .c中define它。

#2


extern int a;
extern int b;
  
要避免多个文件互相包含,要用#ifndef.. #define ..#endif

#3


引用 1 楼 jzp12 的回复:
int a;算声明还是定义呢? --》定义,因为定义会分配内存。
上面的int a,int b =1;和static int c不一样是定义吗? --》都是定义,作用域也一样。
声明用extern.如extern int a;
然后在你使用a的.cpp or .c中define它。


不是define 是include吧?

#4


引用 2 楼 luoyz520 的回复:
extern int a;
extern int b;
  
要避免多个文件互相包含,要用#ifndef.. #define ..#endif


要是a,b没有在cpp里定义过,在 .h里直接extern int a;可以否?
还是只有定义过的变量才能在头文件里extern声明呢?

#5


static int c; 虽然是定义, 但是它是内部链接的, 可以写在 .h 里.

#6


thank你们

#1


int a;算声明还是定义呢? --》定义,因为定义会分配内存。
上面的int a,int b =1;和static int c不一样是定义吗? --》都是定义,作用域也一样。
声明用extern.如extern int a;
然后在你使用a的.cpp or .c中define它。

#2


extern int a;
extern int b;
  
要避免多个文件互相包含,要用#ifndef.. #define ..#endif

#3


引用 1 楼 jzp12 的回复:
int a;算声明还是定义呢? --》定义,因为定义会分配内存。
上面的int a,int b =1;和static int c不一样是定义吗? --》都是定义,作用域也一样。
声明用extern.如extern int a;
然后在你使用a的.cpp or .c中define它。


不是define 是include吧?

#4


引用 2 楼 luoyz520 的回复:
extern int a;
extern int b;
  
要避免多个文件互相包含,要用#ifndef.. #define ..#endif


要是a,b没有在cpp里定义过,在 .h里直接extern int a;可以否?
还是只有定义过的变量才能在头文件里extern声明呢?

#5


static int c; 虽然是定义, 但是它是内部链接的, 可以写在 .h 里.

#6


thank你们