变量被重复定义的问题的讨论
来源:互联网 发布:最好的有源音箱 知乎 编辑:程序博客网 时间:2024/05/21 15:04
变量被重复定义的问题,敬请指教:
在Fat32.h中定义:
#ifndef _FAT32_H
#define _FAT32_H
struct FileInfoStruct FileInfo; //文件信息结构体实体
struct FAT32_Init_Arg Init_Arg; //初始化参数结构体实体
#endif
在fat32.c中
#i nclude "fat32.h"
使用结构体Init_Arg和 FileInfo
在sdwriteread.c函数中使用
#i nclude "fat32.h"
extern void FAT32_Init(struct FAT32_Init_Arg * arg );
extern struct FileInfoStruct * FAT32_OpenFile(char *filepath);
void main()
{
Uint32 i, temp=0;
unsigned char BPB_temp=0x00;
CSL_init();
SdRead_Sector(temp,data_buff);
FAT32_Init(&Init_Arg);
FAT32_OpenFile("//ABC.TXT");
asm( " nop ");
}
编译后出现错误的结果:
>> error: symbol _Init_Arg is defined multiple times:
E://projects//read_write_cpl2//Debug//fat32.obj and
E://projects//read_write_cpl2//Debug//sdwriteread.obj
>> error: symbol _FileInfo is defined multiple times:
E://projects//read_write_cpl2//Debug//fat32.obj and
E://projects//read_write_cpl2//Debug//sdwriteread.obj
头文件已经进行条件编译,还是出现重复定义的问题,不解,请给指点一下,谢谢
由于工程中的每个.c文件都是独立编译的,即使头文件有
#ifndef _FAT32_H
#define _FAT32_H
....
#enfif
在其他C文件中只要包含了Fat32.h就会独立的解释,然后每个.c文件生成独立的相同名字的定义。在编译器链接(生成-o)时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。
解决方法
在.c文件中声明变量,然后建一个头文件(.h文件)在所有的变量声明前加上extern,注意这里不要对变量进行的初始化。然后在其他需要使用全局变量的.c文件中包含.h文件。编译器会为.c生成目标文件,然后链接时,如果该.c文件使用了全局变量,链接器就会链接到此.c文件 。
在Fat32.h中定义变量但不初始化:
#ifndef _FAT32_H
#define _FAT32_H
extern struct FileInfoStruct FileInfo; //文件信息结构体实体
extern struct FAT32_Init_Arg Init_Arg; //初始化参数结构体实体
#endif
在fat32.c中
struct FileInfoStruct FileInfo; //文件信息结构体实体
struct FAT32_Init_Arg Init_Arg; //初始化参数结构体实体
然后在main和fat32.c中 #i nclude "fat32.h",并初始化即可。
- 变量被重复定义的问题的讨论
- 变量被重复定义的问题
- 重复定义的问题
- 保护宏不可以解决变量重复定义的问题
- 解决重复包含一个头文件时变量重复定义的问题
- 关于变量重复定义的理解
- 变量重复定义的奇怪bug
- 关于重复定义的问题
- 接口中定义常量的问题讨论
- 头文件的重复包含和变量的重复定义
- 防止头文件重复包含引起的变量重复定义
- 【看书】关于for循环中定义变量的后续讨论
- sql 定义变量的问题
- c++变量定义的问题
- apue中重复定义的问题
- C/C++中重复定义的问题
- 对于单片机中重复定义的问题
- c++类型重复定义的问题
- JavaScript调用dataTable并获取其值(ASP.Net,VS2005)
- 要毕业了··!
- 【爆笑】超级校规,笑死人
- 距离矢量路由选择协议属性(2)
- 毕业5年决定你的命运 --------值得所有不甘平庸的人看看
- 变量被重复定义的问题的讨论
- MAKEFILE
- 中國移動老總上厕所
- 各大公司笔试题
- Linux下的神奇指令——netcat
- 武汉,又下雪了
- C/C++语言编程修养(转)
- Linux 下如何强制取消 NFS 目录
- packageManager 学习