是否应该依赖间接标头包含?

Tob*_*oby 4 c include

如果一个项目的标题包含第二个标题并且它们都包含一个公共标题,那么从第一个标题中删除公共标题的包含并依赖通过第二个标题的间接包含是一种好习惯吗?

例如:我知道stdint.h 可以从 中删除temperature.h,但应该删除吗?

temperature.h

#include <stdint.h>  // *Should* this include be removed in this case.
#include "i2c.h"

extern uint16_t temperatureRead (i2cData_t x); 
Run Code Online (Sandbox Code Playgroud)

i2c.h

#include <stdint.h>

typedef struct i2cData_t {
    uint16_t exampleMember
} i2cData_t;
Run Code Online (Sandbox Code Playgroud)

Phi*_*gan 5

通常,您希望您的模块是自包含的。如果您的模块依赖于标头中的某些内容,则包含它。Temperature.h 可能有一天会决定不再需要包含 stdint.h 并将其删除。你的代码应该与那个决定无关,所以通过包含 stdint.h 来保护它,即自包含。

使用头文件保护(或 C++ pragma 一次)以确保编译速度不会因多次包含头文件而降低。