您的位置 首页 设计

头文件中界说和声明的问题

1头文件中不可以放变量的定义!一般头文件中只是放变量的声明,因为头文件要被其他文件包含include,如果把定义放在头文件的话,就不能避

1.头文件中不能够放变量的界说!一般头文件中仅仅放变量的声明,由于头文件要被其他文件包括#include,假如把界说放在头文件的话,就不能防止屡次界说变量。C++不允许屡次界说变量,一个程序中对指定变量的界说只需一次,声明能够无数次。

三个破例:1)值在编译时就已知的const变量的界说可放在头文件中,如:const int num=10;
2)类的界说可放在头文件中。
3)inline函数。
2.界说和声明是不同的。界说只能呈现一次,而声明能够呈现屡次。
下面的句子是界说,不能放在头文件中:
externint ival=10; //尽管ival声明为extern,可是它初始化了,代表这是个界说。
double fica_rate;//fica_rate尽管没有初始化,可是没有extern。所以仍是界说。

3.在多个C文件的程序中,想在头文件中声明界说几个变量,假如给声明的变量赋值,则提示重复界说,在声明的变量前加extern只对变量进行声明,可是在什么当地给变量赋值呢??
答:加了extern后,就能够在其他任何引证此文件的当地来进行赋值的。比方说,可在主文件中进行赋值。

4.extern int x; //变量是声明,并未实践分配地址。
void print(); //函数声明,并未发生实践方针代码
如:int x; int x=3; void print() { }; //均为界说。

5。 只需全局变量而且没有被static声明的变量才干声明为extern。所以,假如你不想自己源文件中全局变量被其他文件引证,你就能够给变量加上static声明。
界说也是声明。C++中有个关键字用来声明变量的,即extern。它声明一个变量,而不界说它。
留意:在C++中,变量有且只能有一次界说,可是能够声明屡次。
举例说明:假设在文件1.cpp中界说了一个全局变量bufsize,文件1.cpp中当然能拜访它,假如我想在文件2.cpp中拜访这个全局变量,这时分需要在文件2.cpp中声明这个变量。
//1.cpp
intbufsize;
//2.cpp
extern int bufsize;
这儿说的对错const的全局变量,假如是const的全局变量,假如想被其他文件拜访,需要在界说时,加上extern关键字,表明它可被其他文件声明运用的。不然的话,这个变量只能在它被界说的文件里边被拜访,其他文件不能拜访。
//1.cpp
extern const intbufsize=10;
//2.cpp
extern const int bufsize;
为什么非const变量界说时分没有extern??答:非const变量默以为extern,const变量默以为文件的局部变量。而const变量假如想在其他文件里被拜访,有必要显现的指定它为extern。

6. C++规范并没有规矩头文件中不能界说变量,只不过假如在头文件中界说变量,而该头文件又被屡次包括的话,会形成变量的从头界说。

7. 例如:在test.c文件中界说变量int global=0;
能够在头文件test.h中声明这个变量为extern int global;
要运用这个变量的其他文件,只需包括test.h就能够了。

8. static全局变量是有文件效果域的。在a.c中用了,在其他文件中就不能运用了。static变量一般放在.cpp或许.c文件中。不放在.h文件中。

9. 在某一个.c文件中界说:int num=0;
在.h文件中声明:extern int num;

10. #ifndef、、、#define、、、#endif
能够确保在一个文件里仅仅界说一次。
比方:a.h引证b.h, c.cpp一起引证a.h和b.h。这样,#ifndef、、、#define、、、#endif能够确保c.cpp里的b.h只被引证一次。

留意:要把头文件的内容都放在#ifndef和#endif中。不论头文件会不会被多个文件引证,都要加上这个。
一般的格局:
#ifndef <标识>
#define <标识>
、、、、
、、、、
#endif
<标识>理论上说能够自在命名。可是每个头文件的这个“标识”都应该是仅有的。标识的命名规矩一般是头文件名全大写,前后加下划线,并把文件名中.也变成下划线。 如:stdio.h
#ifndef _STDIO_H_
#define _STDIO_H_
、、、
#endif

程序示例:
//a.h
#ifndef A
#define A

bool AorB(bool a)
{
return a;
}
#endif

//b.h
#include “a.h”
bool CorD(bool a)
{
return AorB(a);
}

//a.cpp
#include “a.h”
#include “b.h”
int main()
{
bool a=0;
bool b=AorB(a);
bool c=CorD(b);

getchar();
return 0;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/257431.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部