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

C 多个头文件到一个源文件?,c,header-files,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文件 编译器是否理解priv_source.h也是source.c的头文件,或者我必须创建另一

我有一个名为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文件

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

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

将声明分为两部分是很常见的——公共声明和私有声明。然而,在这种情况下,私有标头将包括公共标头,如下所示:

来源: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*);
资料来源c

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

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

将声明分为两部分是很常见的——公共声明和私有声明。然而,在这种情况下,私有标头将包括公共标头,如下所示:

来源: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*);
资料来源c

#include "priv_source.h"

你的问题有两点:

函数声明被放入头文件中,以便 包含在多个源文件中,无需显式 在每个源文件中声明。所以,只把那个些声明放在头文件中,你们希望其他文件也能使用它们。 如果某些函数需要限制为特定文件,请 该函数定义为静态函数。一旦将函数定义为 静态,链接时从外部看不到它。范围 该函数的值将限于同一个编译单元, 通常只有那个文件。
你的问题有两点:

函数声明被放入头文件中,以便 包含在多个源文件中,无需显式 在每个源文件中声明。所以,只把那个些声明放在头文件中,你们希望其他文件也能使用它们。 如果某些函数需要限制为特定文件,请 该函数定义为静态函数。一旦将函数定义为 静态,链接时从外部看不到它。范围 该函数的值将限于同一个编译单元, 通常只有那个文件。
在c中,默认情况下,所有函数都是公共的,这意味着如果任何头中的函数只包含头,则该头中的函数声明可以被其他方法使用。现在,如果您显式地声明一个函数,比如static return_type namesome参数,可能是,也可能不是,那么这不能在该文件的外部访问。现在没有任何隐藏java、C++和C等功能的特权。这可能是我不能确定是否使用ILF IF和Endif语句来实现的。如果代码中存在函数,则必须编写逻辑,然后放入if。因为在if语句中,如果条件不满足,那么在预处理器阶段之后,该部分将从代码中消失,类似于代码中的注释。看,我不确定,但可能是。 谢谢
asif aftab

在c中,默认情况下,所有函数都是公共的,这意味着任何头中的函数声明都可以被其他方法使用,如果该函数只包含头。现在,如果您显式地声明一个函数,比如static return_type namesome参数,可能是,也可能不是,那么这不能在该文件的外部访问。现在没有任何隐藏java、C++和C等功能的特权。这可能是我不能确定是否使用ILF IF和Endif语句来实现的。如果代码中存在函数,则必须编写逻辑,然后放入if。因为在if语句中,如果条件不满足,那么在预处理器阶段之后,该部分将从代码中消失,类似于代码中的注释。看,我不确定,但可能是。 谢谢
asif aftab

为什么要将source.c包含到source.h中?这是错误的,应该是我现在编辑的另一种方式…按照惯例,文件source.h不包含source.c中定义的每个函数的声明,只包含那些打算与其他源文件翻译单元共享的函数。对于source.c中不希望从source.c导出的任何函数,不要在source.h中声明它。如果一个函数需要一个声明,因为它是在定义之前使用的,那么只需
把它放在源代码c中的适当位置。此外,打算对source.c私有的函数通常会用static声明。为什么将source.c包含在source.h中?这是错误的,我现在编辑的应该是另一种方式…按照惯例,source.h文件不包含source.c中定义的每个函数的声明,只是那些打算与其他源文件翻译单元共享的功能。对于source.c中不希望从source.c导出的任何函数,不要在source.h中声明它。如果函数需要声明,因为它是在定义之前使用的,那么只需在source.c中的适当位置声明它即可。此外,打算对source.c私有的函数通常会用static声明。相反,source.c包含include source.h,sorry@theva好的,我删除了答案的第一部分,扩展了第二部分。应该是另一种方式,source.c包含include source.h,sorry@theva好啊我删除了答案的第一部分,扩展了第二部分。