头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加
来源:互联网 发布:淘宝大码女装 编辑:程序博客网 时间:2024/04/30 02:21
1.头文件中不可以放变量的定义!一般头文件中只是放变量的声明,因为头文件要被其他文件包含#include,如果把定义放在头文件的话,就不能避免多次定义变量。C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次。
三个例外:1)值在编译时就已知的const变量的定义可放在头文件中,如:const int num=10;
2.定义和声明是不同的。定义只能出现一次,而声明可以出现多次。
下面的语句是定义,不能放在头文件中:
extern
double fica_rate;
3.在多个C文件的程序中,想在头文件中声明定义几个变量,如果给声明的变量赋值,则提示重复定义,在声明的变量前加extern只对变量进行声明,可是在什么地方给变量赋值呢??
答:加了extern后,就可以在其他任何引用此文件的地方来进行赋值的。比如说,可在主文件中进行赋值。
4.
5。只有全局变量并且没有被static声明的变量才能声明为extern。所以,如果你不想自己源文件中全局变量被其他文件引用,你就可以给变量加上static声明。
这里说的是非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;
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)
{
}
#endif
//b.h
#include "a.h"
bool CorD(bool a)
{
}
//a.cpp
#include "a.h"
#include "b.h"
int main()
{
}
- 头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加
- 头文件中定义变量和声明变量的方法
- 关于头文件中声明变量
- 在头文件中定义或声明变量
- 头文件重复声明,变量重复声明
- 关于在头文件中 声明 变量的研究
- 关于头文件变量的声明和定义
- C++头文件保护符和变量的声明定义
- C/C++头文件与变量的声明和定义
- 防止头文件被重复包含、extern、变量定义与声明的区别
- 关于 keil c51 头文件中变量名声明问题
- extern声明跨文件变量
- C++ primer 摘要《extern、变量函数声明与定义、头文件、动态分配与释放》20090119
- C++ 在头文件中声明定义字符数组或指针变量
- 头文件中定义变量
- 头文件中定义变量
- 在类的头文件中声明成员变量和成员函数。
- 头文件为什么不能定义变量
- dubbo 分布式数据分离
- RGB配色表
- Eclipse 绑定 Android 源码。
- DIV+JS实现向上滚动百度新闻
- 在Ubuntu12.04.5_64bit上安装Ros Hydro
- 头文件中只能声明变量不能定义变量 而声明变量必须带extern,为什么头文件中变量的声明都没有加
- linux学习笔记:文件权限与目录配置
- asp.net web api使用默认路由 put delete动作在IIS下受限
- Android中使用Animation实现控件的动画效果以及Interpolator和AnimationListener的使用
- postfix邮件服务器搭建
- php的header来定义一个php页面为utf编码或GBK编码
- 纯CSS设置Checkbox复选框控件的样式
- QPalette
- 使用maven-build时Debug断点出现无法找到源问题