你应该在头文件中包含源代码吗?

Der*_*rek 1 c c++ coding-style

我正在努力将一些源代码移植到Linux系统,正如预期的那样,一些东西被打破了.有一件事就是给我一个错误,就是有人有.h和.cpp文件都使用fclose()

编译器抱怨fclose()在头文件中未声明.

这是头文件中的函数声明:

void closeFile() { if (fp) fclose(fp); }
Run Code Online (Sandbox Code Playgroud)

现在,我认为这是一种糟糕的风格,但是 - 他们之前是如何做到这一点的呢?他们的编译器版本是否允许这种行为?

我应该通过在标题中包含stdio来解决这个问题,还是将整个事情移动到cpp?

peo*_*oro 6

风格不错,你可以将源代码放在头文件中,有时你会被迫使用,特别是:

  • 定义模板类/函数时.

  • 定义内联函数时.

无论如何,你不应该在头文件中放置一个free(在类范围外定义)非内联函数,因为只要源文件包含这样的头文件就会编译(这会给你一个链接错误).

如果您收到一条错误,表明fclose尚未声明状态,则可能是因为cstdio (或stdio.h)未在该段代码之前声明.放在#include <cstdio>头文件的开头.