多个头文件到一个源文件?

时间:2013-12-06 18:04:23

标签: c header-files

我有一个名为source.c的源文件和一个名为source.h的公共头文件。 source.c包含s

#include "source.h"

我不希望source.c中的所有函数都是公共的,因此我想要另一个名为priv_source.h的头文件,它引用source.c中的一些私有函数。

编译器是否理解priv_source.h也是source.c的头文件,还是我必须创建另一个名为priv_source.c的c文件?

3 个答案:

答案 0 :(得分:7)

  

编译器是否理解priv_source.h也是source.c的头文件,还是我必须创建另一个名为priv_source.c的c文件?

C编译器不进行任何此类连接:所有文件,标头和源都与编译器无关。它所知道的是它需要处理的翻译单元的名称(即.c文件的名称)以及这些翻译单元所包含的标题的名称。

将声明拆分为两部分是常见的 - 公共部分和私有部分。但是,在这种情况下,私有标题将包含公共标题,如下所示:

source.h

// Public declarations go here
void public_function1(int, int);
void public_function2(int, double, int);

priv_source.h

#include "source.h"
void private_function1(float);
void private_function2(char*);

由source.c

#include "priv_source.h"

答案 1 :(得分:0)

你的问题有两点:

  1. 函数声明被放入头文件中,以便它们可以 包含在多个源文件中,无需明确需要 在每个源文件中声明。因此,只将这些声明放在您 WANT 的头文件中,以便其他文件可用。
  2. 如果某个功能需要限制在特定文件中,请执行 该函数定义为static。将函数定义为 static,从外面看不到链接。范围 该函数将仅限于同一个编译单元, 通常只是那个文件。

答案 2 :(得分:0)

默认情况下,c中的所有函数都是public意味着如果该函数只包含标题,则任何标题内的函数声明都可以由其他方法使用。现在,如果您显式声明一个函数,如static return_type name(某些参数可能会或可能不会),那么这不能访问该文件的那一侧。现在没有这样的特权来隐藏任何函数,比如java,c ++和c#等。可能这可能是我不确定可以通过使用#if #elseif和#endif语句来实现。如果您的代码中存在该函数然后放入#if,则必须编写逻辑。因为在#if语句中,如果条件不满足,那么在预处理器阶段之后,该部分将从我们的代码中消失,类似于我们代码中的注释。看我不确定但可能是。 谢谢 asif aftab

相关问题