函数定义不能在头文件中
精选 转载在C++/C中,一般的函数与全局变量的申明都会放在.H文件中,而且会在相应的.C文件中对函数和变量进行定义.全局变量在头文件中前面要加上EXTERN,定义时则不用
如果你在.H文件中对函数或变量直接定义,这个头文件只被一个文件包含是不会出错的,但是一旦它被两个或更多的文件包含,则会报错.编译器会告诉你函数或变量重复定义!
你可能会说,我不是已经在头文件中加上了防止重复引用的措施了吗?
#endif
实际上这种措施只能防止在一个文件中对头文件的重复引用:在一个文件中一个头文件被引用了一次之后,再次引用时会首先判断是否已被引用过,若是则跳过,这样就防止了头文件的重复引用.若有多个文件引用同一头文件,则会出错,例如:
//f.h
#ifndef _F1_H_
#define _F1_H_
int a;
#endif
//f1.cpp
#include "f1.h"
main()
{
}
//f2.cpp
#include "f1.h"
void fun2()
{
}
宏的作用域:宏的作用域只在一个文件中.
错误的原因是:f1.cpp首先引用了头文件,包含了a的定义,然后在f2.cpp中再次引用了f1.h,f1.h首先会进行判断是否定义了宏_F1_H_,因为宏的作用域没有超过一个文件的范围,所以判断的结果是_F1_H_没有被定义过--虽然f1.cpp中已经定义过一次,但是它是局部的!a在f2.cpp中再次被定义!
上一篇:静态链接
下一篇:查找数组中重复的数字
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
cctype头文件中定义的函数
isalnum(c) 假如c是字母或数字,则为true isalpah(c) 假如c是字母,则为t
cctype 头文件 定义 函数 git 字符串 十六进制 -
能不能在头文件中定义全局变量?(转)
地址:https://blog.c
全局变量 编译器 源文件