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

a.h:
#ifndef_KNIFE_ADT_H
#define_KNIFE_ADT_H
enumColor{red,greed,blue};
typedefstructa{
inta;
doubleb;
Colorc;
}A_type;
A_typeA_array[1024];//(1)
intCount;
voidfunc(A_typeA,Colorcolor_type)
#endif
a.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_H
enumColor{red,greed,blue};
structa;
typedefstructaA_type;
voidfunc(A_typeA,Colorcolor_type);
#endif
c1.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.cpp
1>c:\test\test_file\main.cpp(4):errorC2065:“Count”:未声明的标识符
在头文件中声明intCount,即可消除最后一条编译错误信息。
另外,在头文件中声明intCount后又在源文件中加上externintCount,有什么作用呢?具体用在哪些情景下?
白衣染霜花
浏览 458回答 2
2回答

智慧大石

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

相关分类

JavaScript