我应该在头文件中包含<stdio.h>,这样我就可以声明一个带有FILE*的函数吗?

Mat*_*att 5 c c++ coding-style declaration header-files

例如foo.h:

typedef struct foo_t foo_t;

/* Lots of function declarations dealing with foo_t... */

int foo_print(const foo_t *foo); /* Print foo to stdout. */
int foo_fprint(FILE *f, const foo_t *foo); /* Print foo to file f. */
Run Code Online (Sandbox Code Playgroud)

我不想丢弃foo.h太多其他用户foo.h可能不想包含的头文件,但我确实需要声明采用类型的函数FILE*.我怀疑自己是第一个遇到这种困境的人,所以在这种情况下人们通常会做些什么呢?或者我错误地想要避免包含stdio.h在我的头文件中?

编辑:

人们似乎不理解我的问题.澄清一下,这里有一些潜在的解决方案:

  1. 只需包含stdio.h而不用担心它会导致客户端代码发生冲突(例如,如果他们碰巧有自己的函数碰巧被调用getchar).
  2. 使用a #ifdef来查明是否stdio.h已经包含,然后才声明FILE*相关函数.这样做的缺点是它会#include在我的客户代码中强加一个特定的排序.
  3. 将所有与I/O相关的声明移动到单独的头文件,例如foo_io.h.

什么是最好的事情是什么问题?

eza*_*rii 3

简短的回答:您正在尝试解决一个不存在的问题。

如果使用,则在 C++ 中FILE包含stdio.h或。cstdio就是这么简单。

除了明显未使用的情况之外,尝试“优化”#include不会给您带来任何东西并导致问题。