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变量.
以我现有的知识是这样的过程.参照编译原理之类的知识.
extern(?)关键字可以解决这个问题.




你确实是定义了两次

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




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值