C:标题中的包含

时间:2009-09-10 07:33:09

标签: c dependencies include

如果我有以下内容:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

#include <stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif


这是否意味着使用... #include example.h ...的代码将不必... #include example.h的...依赖? (即:#include <stdio.h>

3 个答案:

答案 0 :(得分:2)

但如果代码依赖<stdio>,它可能应该包括它。 (毕竟,<stdio>也有多重包含保护。)

如果你想要的是你的项目的主要包含,那么继续做一个,但它包括实际的标题和公共系统标题,但没有原型或声明或宏。也就是说,大型包括什么都不做,只包括。这样,随着程序的发展,各个模块可以自行决定。

答案 1 :(得分:1)

正确 - 这就是为什么限制其他标头中包含的必要标头的良好做法。预处理器将使用stdio.h的内容替换“#include”指令, 所以你的标题看起来像编译器:

/*
 * example.h
 */

#ifndef EXAMPLE
#define EXAMPLE

<contents of stdio.h>

extern int parse_string(FILE *, char const*, const unsigned int);

#endif

答案 2 :(得分:0)

是的,你可以这样做,它会产生预期的效果。

对于您的特定示例,您需要在&lt; stdio.h&gt;中声明FILE,因此最好包含它。

如果parse_string()原型使用size_t而不是unsigned intconst char *(对于文件名)而不是FILE *,我会包含&lt; stddef.h&gt; ;在“example.h”中

#ifndef EXAMPLE
#define EXAMPLE
#include <stddef.h> /* size_t typedef */
extern int parse_string(const char *filename, char const*, const size_t);
#endif