我有一些关于头文件的问题(我在谈论c,但我认为它对c ++来说是一样的),让我们假设我有一些my_ADT.c
文件(里面我有函数的实现和实际struct
)以及my_ADT.h
内部pointer for my struct
Question:
如果我使用ADT Set
进行实施my_ADT
,我需要将set.h
包含在my_ADT.h and my_ADT.c
文件中,还是只包含my_ADT.h
足够的(在my_ADT.c内我有#include "my_ADT.h"
)提前谢谢
答案 0 :(得分:3)
有3种情景
set.h
中需要my_ADT.h
仅在set.h
my_ADT.c
{li} set.h
和my_ADT.h
my_ADT.c
根本不需要set.h
: - ) 对于方案3),将#include "set.h"
添加到文件my_ADT.h
,记录该事实,并将#include "my_ADT.h"
添加到my_ADT.c
中(包含正确的内容)通过将set.h
也包括在C文件中,你不会失去任何东西。
对于方案2)仅在set.h
my_ADT.c
对于方案1)仅在set.h
my_ADT.h
答案 1 :(得分:1)
如果my_ADT.h
文件中包含my_ADT.c
,则您应仅在set.h
中加入my_ADT.h
。
答案 2 :(得分:0)
对于pmg回答,你必须知道避免#include问题的一个好方法是用一个更加合理的指令来包围所有头文件,检查.h文件是否已经包含在内。
#ifndef __my_ADT_header
#define __my_ADT_header
/*
* your header declaration here
*/
#endif
这可以防止由多个标头包含引起的错误
希望这会有所帮助