菜鸟请教: 使用自定义数据类型,却不用include头文件

奶糖人五号 2010-11-24 11:51:39
学习时,看到一段代码。 该代码并未include其它头文件,那么它编译时是如何解析自定义数据类型的?

整套代码肯定是可以编译通过的

例如


#ifndef xx_h
#define xx

SYS_INT a;

#endif


请问这是如何做到的。一般不都是include类型定义的头文件么。 是不是编译时,预设了一些include目录,或者用其它手段做到的?
...全文
434 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ctwarmer 2013-03-20
  • 打赏
  • 举报
回复
理解错误了....
大神带我飞 2013-03-20
  • 打赏
  • 举报
回复
引用 5 楼 hnuqinhuan 的回复:
这是预编译啊 不是头文件
+1
赵4老师 2013-03-20
  • 打赏
  • 举报
回复
VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
ctwarmer 2013-03-20
  • 打赏
  • 举报
回复
LZ贴出的代码应该是一个头文件,其中SYS_INT为自定义类型(在其他头文件中定义,比如1.h)。 我的理解是:LZ是想问,为什么xx_h这个头文件中没有包含1.h,却可以直接使用SYS_INT,如果真的是这个问题,9# HonryZZ 的回答是正解。
奶糖人五号 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 honryzz 的回复:]

假设有头文件
1.h
typedef int SYS_INT
2.h
SYS_INT var1;
1.c
#include "1.h"
#include "2.h"
....

这样也可以呀....头文件在编译的时候直接展开...展开后这个SYS_INT还是定义了的,虽然头文件2.h中没有包含...但在c文件中包含了就可以了...

项目中有些把系统相关的adaption……
[/Quote]

哥哥啊,我要哭了,你看清了我的问题没有

我的问题是: 这个段代码所在的代码文件及项目,不用include自定义类型的头文件,照样能编译过。
HonryZZ 2010-11-24
  • 打赏
  • 举报
回复
假设有头文件
1.h
typedef int SYS_INT
2.h
SYS_INT var1;
1.c
#include "1.h"
#include "2.h"
....

这样也可以呀....头文件在编译的时候直接展开...展开后这个SYS_INT还是定义了的,虽然头文件2.h中没有包含...但在c文件中包含了就可以了...

项目中有些把系统相关的adaption都统一放在一个头文件中,然后每个C文件最开始就include该头文件...
奶糖人五号 2010-11-24
  • 打赏
  • 举报
回复
看来我没说清楚,在我贴的示例代码中,有一行 SYS_INT a; 这里的SYS_INT是自定义类型的数据结构,而此代码所在的文件又没有include其它头文件,那么编译 SYS_INT a;时,是怎么编译过去的?
qweworld 2010-11-24
  • 打赏
  • 举报
回复
上面打错了,因该是主函数main.c
qweworld 2010-11-24
  • 打赏
  • 举报
回复
一个C语言项目工程中包含多个文件,当然也包括头文件main.c,而这其中有你编写的多个.c文件和.h文件(头文件)等等很多文件,所有这些文件作为一个整体(工程project)是不可分割并且紧密联系在一起的,当其中某一个文件要包含本工程中其他某些文件的时候就在此文件前面#include<某某文件>,这里的#ifndef xx_h
#define xx
(内容)
#endif,这三句话是一个固定格式,是为了在本工程中的其他文件中避免重复引用本文件,因为重复引用时不能通过编译的,加上这三句就可以避免多次重复引用此文件,此种情况在.h(头文件中)文件中最常见.

無_1024 2010-11-24
  • 打赏
  • 举报
回复
这是预编译啊 不是头文件
奶糖人五号 2010-11-24
  • 打赏
  • 举报
回复
我在VC下开了个工程试了下,还是不行。

就算把自定义类型的头文件所在目录加入工程,代码中不include,仍然提示是未定义的数据类型
漫步者、 2010-11-24
  • 打赏
  • 举报
回复
这个时候不需要用#include头文件来处理了!
....
我也不知道如何讲好,呵呵!~
只可意会不可言传!
Jim_King_2000 2010-11-24
  • 打赏
  • 举报
回复
你在include这个头文件之前,必须首先include SYS_INT被定义的那个头文件。这套代码显示了一个很不好的风格,用户必须手动处理头文件之间的依赖。比较好的做法是,在xx.h中包含SYS_INT被定义的那个头文件以及其依赖的一切头文件。
aozhi 2010-11-24
  • 打赏
  • 举报
回复
你说的没错,一般都是预置了一些include目录。
这一点你可以从工程文件的代码,或者由工程文件生成的make文件中看到。
xunxun 2010-11-24
  • 打赏
  • 举报
回复
具体得看你makefile,这个一般是为移植考虑的,如果你的target检测配置刚好在-Dxx_h之类,这段代码就跳过去了。
wxwlll 2010-11-24
  • 打赏
  • 举报
回复
编译集成环境已经预置了!比如在VC6.0中如果只用到了#include<stdio.h>,那么这个可以省略。
HonryZZ 2010-11-24
  • 打赏
  • 举报
回复
不晓得LZ是在啥环境中编译的,比如用GCC,如果使用makefile之类的话,都可以在-CFLAG中设置共用的头文件信息
gcc -include ../headerfile...

我也是菜鸟...等高手来吧...

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧