C怎么判断是否包含了某个头文件

考虑过使用#ifndef,但是那个是为了防止某个头文件被反复包含的。我的问题是如何判断某个头文件(比如windows.h)是不是包含了,如果没有包含的话需要进行某个操作,... 考虑过使用#ifndef,但是那个是为了防止某个头文件被反复包含的。我的问题是如何判断某个头文件(比如windows.h)是不是包含了,如果没有包含的话需要进行某个操作,包含了的话就不需要了,这中情况下怎么弄呢?有没有这样的语句
比如我封装一个类,这个类在使用时有可能包含Windows.h,也有可能不包含。但是类中需要使用DWORD等类型,这时如果不包含windows.h就需要自己定义DWORD类型,而如果包含了Windows.h再定义DWORD就会出错。为了保证程序的通用性,这种问题怎么解决呢?
展开
 我来答
L_o_o_n_i_e
2011-10-04 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5211万
展开全部
包含某个头文件的工作是在编译初期做的,而不是程序运行时做的。所以没有办法在程序运行时判断是否包含了某个头文件。
缺少了某个头文件,有的函数找不到原型,某些变量找不到值,编译通不过。

通常用#ifndef 之类的宏。
如果你不想用,也可尝试在源程序第一行写:
#pragma once
它的作用是 包含一次。

头文件有各式各样的,你不 #include ..., 编译器也不知道你打算 #include 什么。
windows.h 这种头,你写重了也没关系,没有副作用。
math.h 你漏写了,编译器也可能查不出,而程序运行结果数值会不正确。

所以头文件包含 还是要规规矩矩认认真真自己写 包含。
追问
比如我封装一个类,这个类在使用时有可能包含Windows.h,也有可能不包含。但是类中需要使用DWORD等类型,这时如果不包含windows.h就需要自己定义DWORD类型,而如果包含了Windows.h再定义DWORD就会出错。为了保证程序的通用性,这种问题怎么解决呢?
追答
编译和链接过程,会有出错信息,根据出错信息,找到出错地点修正。

你的意思,总不至于通过“语句”“定义”达到没有 编译和链接出错信息,不须 debug 吧?
这点是做不到的。

宏定义 重复定义 会有 警告信息,一样可以运行。例如
#define DWORD unsigned int
#define DWORD unsigned int
#define X 0
#define X 1
DWORD 这句没问题,因为两句定义得一样。
X 有 警告信息, 数值以后定义的为准。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式