是否可以将文件包含到头文件中
Posted
技术标签:
【中文标题】是否可以将文件包含到头文件中【英文标题】:Is it ok to include files into a header file 【发布时间】:2015-04-15 13:45:56 【问题描述】:像这样将头文件包含到另一个头文件中是否是一种常见的做法:
#ifndef _IO_H_
#define _IO_H_
#include <stdint.h> //Is this OK?
typedef struct
uint8_t PIN0 :1;
uint8_t PIN1 :1;
uint8_t PIN2 :1;
uint8_t PIN3 :1;
uint8_t PIN4 :1;
uint8_t PIN5 :1;
uint8_t PIN6 :1;
uint8_t PIN7 :1;
pin_map;
#endif /*_IO_H_*/
【问题讨论】:
可能重复:***.com/questions/16099271/… 顺便说一句,“包含守卫”#ifndef _IO_H_
、#define _IO_H_
和 #endif /*_IO_H_*/
专门用于将头文件包含到其他头文件中。我猜你的stdint.h
文件contains such include guards too - 如果没有(极不可能),那么在你的头文件中使用#include <stdint.h>
是很危险的。
注意:_IO_H_
对应保留名称。所以这是非法的。
【参考方案1】:
是的,这很常见。
有人说这是个坏主意,但我不同意,因为显然你正在编写的标题需要 <stdint.h>
并且要求标题的用户来解决这个问题。
也就是说,你当然不应该包含你不需要的标头,因为这会导致混乱和构建时间,这两者都是不好的,应该尽量减少。
【讨论】:
另外,避免在以下情况下包含任何不必要的头文件:当file.h
是file.c
和file.c
的公共头文件时,例如一些数学,包括math.h
仅在源文件中,不在标题中。以上是关于是否可以将文件包含到头文件中的主要内容,如果未能解决你的问题,请参考以下文章
VS2017 包含了文件路径却还是找不到头文件(无法打开源文件“***.h”)