如果我有以下内容:
/*
* 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>
)
答案 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 int
和const 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