c语言重复定义 multiple definition of `Recusion'

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




  1. 先有预处理程序 把include分别包含进 a.c 和 b.c文件中(h文件就没用/丢弃了)
    其实这里#ifdef根本没被使用(利用)/没有重复包含嘛 :)
  2. 编译器汇编器分别单独 编译+汇编 a.c b.c文件生成a.o 和b.o 到这里没有任何问题.(这里分两步:编译/汇编,我暂时分不出这两步,在这个问题中不是很重要)
  3. 连接器 ld 链接 a.o 和b.o 这里发现了重复定义的r变量.
c语言重复定义 multiple definition of `Recusion'_第1张图片
以我现有的知识是这样的过程.参照编译原理之类的知识.
extern(?)关键字可以解决这个问题.




你确实是定义了两次

#ifndef _INCLUDE_NTREG_H
#define _INCLUDE_NTREG_H 
只能保证在一个源文件中不会重复多次引用。
你现在是在两个cpp文件中,而且这两个文件要链接成一个可执行文件,就会有两处定义。
最佳实践是头文件不能有变量的定义,可以有声明。




你可能感兴趣的:(c/c++)