为了账号安全,请及时绑定邮箱和手机立即绑定

C/C++头文件声明变量的问题

C/C++头文件声明变量的问题

白衣染霜花 2019-04-08 11:19:24
a.h:#ifndef_KNIFE_ADT_H#define_KNIFE_ADT_HenumColor{red,greed,blue};typedefstructa{inta;doubleb;Colorc;}A_type;A_typeA_array[1024];//(1)intCount;voidfunc(A_typeA,Colorcolor_type)#endifa.c:#include"a.h"Count=0;//(2)voidfunc(A_typeA,Colorcolor_type){;}main.c:#include"a.h"intmain(){Count=0;return0;}问题:如上文件结构,编译会报重复定义的错误。在VS中,会报错.obj重定义。怎样处理最好?另外如(2),如果想要给.h文件中变量初始化,最合适的方法是?补充:1.将声明写在.C文件中,.h文件中只有enum枚举常量与结构体的声明,所有变量定义放在.c文件中:c1.h:#ifndef_KNIFE_ADT_H#define_KNIFE_ADT_HenumColor{red,greed,blue};structa;typedefstructaA_type;voidfunc(A_typeA,Colorcolor_type);#endifc1.c:#include"c1.h"structa{inta;doubleb;Colorc;};A_typeA_array[1024];//(1)intCount;voidfunc(A_typeA,Colorcolor_type){;}main.c:#include"c1.h"intmain(){Count=0;return0;}VS2012编译信息:1>c:\test\test_file\c1.cpp(4):errorC2380:“a”前的类型(构造函数有返回类型或是当前类型名称的非法重定义?)1>正在生成代码...1>正在编译...1>main.cpp1>c:\test\test_file\main.cpp(4):errorC2065:“Count”:未声明的标识符在头文件中声明intCount,即可消除最后一条编译错误信息。另外,在头文件中声明intCount后又在源文件中加上externintCount,有什么作用呢?具体用在哪些情景下?
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

Count=0;//(2)
这句等同于:
intCount=0;
未声明类型的变量默认为整型,未声明返回值类型的函数默认为整型。所以你在这里又定义了一个Count变量。
另外全局变量自动初始化为零,所以你这句没有用处。
voidfunc(A_typeA,Colorcolor_type)
这句末尾少了个分号。
(1)处我看不出什么问题,你贴原始的报错信息吧。你描述的报错信息语焉不详。
如果要初始化为常量,直接写在头文件里就可以了。如果要运行时初始化,只能写在一个函数里告诉别人先调用一下它。
更新:
如果你想在不同的编译单位(即单个的(被编译的).c文件)中共享一个变量,请声明变量的linkage为extern,即externintCount。
另外,你的Color类型没有定义。被定义的叫enumColor。
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 457 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信