c语言重复定义。。。。
我在头文件(.h)中定义声明了一个变量
int Recusion = 0; /*0,1*/
然后在两个.cpp文件中使用
a.cpp
--------------------------
Recusion = 1;
b.cpp
--------------------------
if(Recusion && ...)
{
}
但是编译却有这个错误,怎么回事?
multiple definition of `Recusion'
难道是他们都包含头文件,以致于多次定义,可是我的头文件有做处理啊
#ifndef _INCLUDE_NTREG_H
#define _INCLUDE_NTREG_H 1
- 先有预处理程序 把include分别包含进 a.c 和 b.c文件中(h文件就没用/丢弃了)
其实这里#ifdef根本没被使用(利用)/没有重复包含嘛 :) - 由编译器和汇编器分别单独 编译+汇编 a.c b.c文件生成a.o 和b.o 到这里没有任何问题.(这里分两步:编译/汇编,我暂时分不出这两步,在这个问题中不是很重要)
- 由连接器 ld 链接 a.o 和b.o 这里发现了重复定义的r变量.
以我现有的知识是这样的过程.参照编译原理之类的知识.
extern(?)关键字可以解决这个问题.
你确实是定义了两次
#ifndef _INCLUDE_NTREG_H
#define _INCLUDE_NTREG_H
只能保证在一个源文件中不会重复多次引用。
你现在是在两个cpp文件中,而且这两个文件要链接成一个可执行文件,就会有两处定义。
最佳实践是头文件不能有变量的定义,可以有声明。