【IAR】定义结构体出现的错误Error[e27]:

来源:本站
导读:目前正在解读《【IAR】定义结构体出现的错误Error[e27]:》的相关信息,《【IAR】定义结构体出现的错误Error[e27]:》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《【IAR】定义结构体出现的错误Error[e27]:》的详细说明。
简介:想定义两个结构体,在WARN.h 文件中定义结构体,然后再WARN.c文件中使用:
ER_WARN.Span=0x0000;ER_WARN.Span=0x0000;等,
结构编译器报错:Error[e27]: Entry "ER_WARN" in module AD ( C:…… ) redefined in module FINGERPRINT (…… )

文件.c是从来都是不要包含.c文件的,否则很容易出现重复定义的错误。类型的定义和类型变量的定义不同,类型定义只是描述一个类型,是给编译器看的,不会产生可执行代码。类型变量定义是指在执行文件中真实得存在这么一块内容。因此,类型定义可以重复出现也没关系,类型变量是不能在多个.c中出现,否则就是重复定义。因为每个.c里都要写清楚类型定义很麻烦,所以一般都把类型定义写在.h里,而在.c里采用简单的写法,如struct A a;这样定义变量,不需把整个类型的描述再写一遍。

出现上述错误的原因是:我们在.h中 既定义了类型:

struct WARNING //报警

{

……

};

又定义了类型变量

struct WARNING WARN;

然后因为所有的.C文件都#include了.c文件,#include相当于简单的拷贝,因而在多个.c文件中出现了:struct WARNING WARN; C不允许.c中有多个变量,因而出错。

***************************************************************************

我就纳闷了,在WARN.h中定义,在WARN.c中使用怎么会报这个错误呢。(声明一下,结构贴的成员仅在WARN.c文件中调用,其他文件没有)。

然后我又试着,将以下的定义放到:CONFIG.h 总的头文件中去,结果还是出现这个问题。百思不得其解。

然后,把整个结构体定义放到WARN.c文件中,编译通过。我就想是不是struct WARNING ER_WARN;、struct WARNING WARN;这两个语句的问题,然后我单独把这个两个语句放到WARN.c文件中,红色部分依然留在WARN.h中,编译也通过了……

很是纳闷,这是为什么?

struct WARNING //报警

{

unsigned char Weight; //吊重

unsigned char Moment; //力矩

unsigned char Span; //限幅

unsigned char Lifting; //起升

unsigned char Rotary; //回转

unsigned char Wind; //风速

unsigned char DipAngle; //倾角

unsigned char Hight; //高度

};

struct EARLY_WARNING //预警

{

unsigned char Weight; //吊重

unsigned char Moment; //力矩

unsigned char Span; //限幅

unsigned char Lifting; //起升

unsigned char Rotary; //回转

unsigned char Wind; //风速

unsigned char DipAngle; //倾角

unsigned char Hight; //高度

};

struct WARNING ER_WARN;

struct WARNING WARN;

[解决办法]

一般只在头文件中声明变量,在原文件中定义变量,

即使你在头文件中使用了预编译指令#ifndef....#define...#endif,也不能在头文件中定义变量

[解决办法]

你的头文件没有用LS那个所说的条件编译指令

当你在多个地方包含这个头文件的时候,就会在两个地方产生定义

因为,其实包含也是比较单纯的文本复制,相当于一个头文件被分别复制到两个地方,这个编译的时候当然就冲突了

[解决办法]

在WARN.h文件的最开始两行加上

#ifdef_WARN_H_

#define_WARN_H_

在该文件的最后一行加上

#endif

[解决办法]

上面提到的方法也不通用,比如说有几个.c文件要包含同一个.h文件,而那个.h文件定义了变量或者结构编译还是会通不过,比较通用的方法是:专门用一个.c文件来定义变量或者结构,用对应的.h文件来声明。所有的.c文件都则都可以包含声明变量的.h文件。

[解决办法]

即使可以通过#ifdef的方式解决问题,这也不是好的方法,对于变量的定义,应放在实现文件里面,然后通过extern的方式来引用

[解决办法]

标准的做法还是在.h文件中声明变量,在一个.c文件中定义变量,其它.c文件要用到变量只要包含.h头文件,相当于变量声明,就可以引用其它.c文件中定义的变量了。

[解决办法]

切记切记,定义的变量要放在C文件里,声明才放在H文件。

提醒:《【IAR】定义结构体出现的错误Error[e27]:》最后刷新时间 2024-03-14 01:08:54,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《【IAR】定义结构体出现的错误Error[e27]:》该内容的真实性请自行鉴别。