结构体定义在头文件中被重复包含的问题 #include\"头文件\",这种声明是本文件包含了所包含的头文件里面内容,这样该文件在预处理时就会把头文件里面包含的内容搬过来,用其内容来替换#include\"头文件\"这条语句,因此多个文件包含同一头文件,或间接包同一含头文件就如楼主这种情况,就会在fun2中产生两次(甚至多次的)typedet struct student{int a;int b;}STU;这个结构体定义,因此会出现重定义错误,要避免这种情况需要使用条件编译处理如下struct.h 这个头文件就应该这样写ifndef FUN_H/这个FUN_H是随便写,但建议有意义也不能和别的头文件相同。define FUN_Htypedet struct student{int a;int b;}STU;endiffun1.h 这个头文件包涵struct.h 这个自定义头文件就应该进行条件编译处理如下写:ifndef FUN_Hdefine FUN_Hinclude\"struct.hendif如果本头文件实现了函数就把函数声明放条件编译里面,函数定义放条件编译外面(一般都会是头文件只做函数原型声明,会在另一个源文件只做定义即实现,当然,对于内联函数有点点区别,楼主自己区别),这样一来fun1就该这样写:ifndef FUN_Hdefineinclude\"struct.hvoid(int a,STU*studentone);endifvoid(int a,STU*studentone){函数实现,但是一般。结构体定义在头文件中被重复包含的问题 结构体定义在一个单独的头文件中,struct.htypedet struct student{ int a;int b;}STU;然后有两个函数fun1和fun2,fun1.h为#include。这个问题,C语言,一个关于头文件重复定义的问题!!!?? 1.是链接出错吧不知道你有没有手工编写过makefile这么说吧 C语言的编译过程分为编译和链接编译之前有一个预处理编译的最小单位是单个文件也就说预处理的最小单位也是单个文件假设工程中有 a.c b.c两个文件 都包含了globle.h那么对a编译的时候,globle只包含一次 生成的 a.o 中包含了 a_s32 b_s32(即你定义的变量)对b编译的时候同样会包含globle.h 而且只包含一次所谓只包含一次 是在单个c/cpp文件中只包含一次这样在object中就会有多个相同命名的变量被包含进去链接的时候就会出错出错不会出现在编译过程中的2.可以包含任何语句C语言中,自定义的两个头文件里同事包含了同样的宏定义和同样的结构体,同时使用这两个头文件时出错 <;file1.h>;#ifdef MAXSIZEelsedefine MAXSIZEtypedef struct tdate{int year;int month;int day;}list;endififdef MAXSIZEelsedefine MAXSIZEtypedef struct tdate{int year;int month;int day;}list;endifincludeinclude\"htest1.hinclude\"htest2.hvoid main(){tdate sd;sd.year=2010;sd.month=9;sd.day=14;cout年\"月\"日\";}现在明白了么?求问个c语言问题 为什么含有结构类型的源文件引用头文件会出错,而将头文件中函数合并到源文件里就不会 这个要具体看看你的代码了。C++中头文件中定义全局变量,出现重复定义的错误 最好把程序贴出来看看关于自定义头文件在多个文件中引用时提示重复定义的问题(C语言) #ifndef identifier_hdefine identifier_hendif这套条2113件编译是为了防止同一个.c文件5261中包含多个相同.h文件的(比如有4102一个.c文件包含了a.h,a.h又包含了b.h,那1653么当你在这个.c文件中同时包含了a.h和b.h时,因为有上面的条件编译的关系而不会出错)。因为编译器在编译的时候是按照.c文件为单位编译的,每个.c文件编译成.o文件(linux系统)或者.obj(windows系统),然后再将这些.o文件链接起来,最后与运行库链接形成可执行文件(elf或exe文件)。你在两个.c文件中包含了同一个.h文件。这根本和条件编译没什么关系。你在.h文件中定义了全局变量a,b,c。那么就表示你两个.c文件中,每个.c文件中都有这样的全局变量定义:int a,b,c;当每个.c文件单独编译当然没有问题,但是当它们链接起来的时候就出现问题了:两个.c文件中都有变量a b c,所以当然是重复定义啊。问题是出在链接的时候的。这个问题,C语言,一个关于头文件重复定义的问题。。。?? 1.是链接出错吧不知道你有没有手工编写过makefile这么说吧 C语言的编译过程分为编译和链接编译之前有一个预处理编译的最小单位是单个文件也就说预处理的最小单位也是单个文件假设工程中有 a.c b.c两个文件 都包含了globle.h那么对a编译的时候,globle只包含一次 生成的 a.o 中包含了 a_s32 b_s32(即你定义的变量)对b编译的时候同样会包含globle.h 而且只包含一次所谓只包含一次 是在单个c/cpp文件中只包含一次这样在object中就会有多个相同命名的变量被包含进去链接的时候就会出错出错不会出现在编译过程中的2.可以包含任何语句关于头文件重复包含问题 重复包含的影响:在预处理对时候,include相同的文件,预处理器会检查XXX是否有定义再决定要不要复制内容,重复包含会是编译器多检查几次而已。另外在使用增量编译的时候,这个文件变化,所有 include 这个文件的文件都需要重新编译,即使没有去使用里面的任何内容。避免方法:1.把头文件放在宏里:ifndef 标志(这个标志本来可以随便自己定义,但是为了防止混乱,所以一般都会采用自己的文件名字:_WENJIAN_H_)define 标志文件内容endif在头文件定义前面添加pragma once(不太通用)就可以防止一个头文件被多次包含,进而防止重复定义的错误。在用VC6.0向导生成的头文件中,经常可以看见如下的代码段:if。defined(AFX_RESIZABLELAYOUT_H_INCLUDED_)define AFX_RESIZABLELAYOUT_H_INCLUDED_if_MSC_VER>;1000pragma onceendif/_MSC_VER>;1000endif/。defined(AFX_RESIZABLELAYOUT_H_INCLUDED_)对于宏有基本了解的朋友应该都知道,头文件中如下的宏定义,是为了避免同样的头文件在同一个.C文件或者.CPP文件多次包含。if。defined(XXX)define XXXendif这很好理解,但接下来的一段,尤其是#pragma once的意思,我就不是很清楚了。从MSDN得到pragma once的。
随机阅读
- 车内音效设置 汽车最佳10段音效怎么设置
- 基因定位和连锁遗传图谱 想查阅一个基因在遗传图谱上的位置,但是,发现图谱上都是分子标记的名称,不是基因名或是基因序列名.我该怎么办?
- 想知道: 呼伦贝尔市 内蒙古免渡河镇东二道街 在哪 免渡河是市还是镇
- 初中正确处理男女关系 如何正确处理男女之间的关系
- 梦了一晚在成都 一个下午+一个晚上在成都的行程怎么安排比较好?
- 读图填表 东西半球的经度范围图
- 郴州永兴湘阴渡镇贪头村刘易组 湖南省郴州市永兴县国土局后面是顺风速运吗?
- 支付宝交电费显示此账单已经缴纳 你好用支付宝交电费为什么显示此帐单已缴纳怎么回事啊
- 国内有哪些适合一个人去旅行的地方? 浙江平阳县竹林园机械小吃车
- 却上心头酷狗 光头华夏《无期》 的歌词是什么意思?
- 铁岭市2路公交车怎么走 长沙城南东路鑫海洗浴
- 南京江宁区殷富商业街到江南青年城公交 江宁殷富商业街发展规划
- 八宅风水看丑山未向,大门宜开哪个方位最好? 阳宅丑山未向风水井的方位
- 气功和太极拳有什么区别 气功太极拳97
- 厦门金鸡百花永久 第二十八届百花奖在厦门什么地方召开?
- 求火影忍者赤砂之蝎或迪达拉QQ头像 火影忍者赤沙之蝎头像
- 两天时间维尔茨堡、罗腾堡、丁克尔斯比克、讷德林根、奥格斯堡走走够不够? 讷德林根 丁克尔斯比尔 哪个
- 豌豆长什么样 豌豆芽 百科
- 妈妈有一台罗氏优越型血糖仪已经购买2年了,需要校正吗?成都哪里有卖价格实惠的试纸呢? 上海强生血糖仪校正处
- 非礼勿视的重要性 “非礼勿视、非礼勿听、非礼勿言、非礼勿动”中“礼”的具体含义是什么?