假设我有一个我想在内部使用的函数,例如Java或C ++中的private
,但是我用C编写。在这种情况下,我有一个头文件和一个c
文件实现和c
文件有几个不应该对最终用户可用的功能。我可以不在头文件中声明这些函数以防止访问它们,或者这是一种不好的做法/有更好的方法吗?
答案 0 :(得分:0)
制作此类内部函数static
并将其保存在.c
文件中。
请参阅static functions:
如果仅从声明它的文件中调用函数,则将其声明为静态函数是合适的。当函数声明为static时,编译器现在将以某种方式编译为目标文件,以防止从其他文件中的代码调用该函数。
或者在C标准中:
6.2.2标识符的链接
...
如果对象或函数的文件范围标识符的声明包含存储类 说明符static
,标识符具有内部链接。 11 只有当函数声明位于文件范围内时,它才能包含存储类说明符。
答案 1 :(得分:0)
是的,可以使头文件中没有一些功能。
其他选项是将头文件分成2.一个用于内部使用,另一个用于外部用户。
除此之外,您还可以声明函数static,使其在文件范围之外不可见
答案 2 :(得分:0)
这就是你在这种情况下会做的事情,并为声明的函数添加静态。您可以在.h文件中声明公共函数,在.c文件中声明私有函数。
假设你有一个.h和.c文件:
void doSomething1(void);
void doSomething2(void);
static void doSomething3(void);
static void doSomething4(void);
//These functions can be called by anyone
void doSomething1(void)
{
//function guts here
}
void doSomething2(void)
{
//function guts here
}
//These functions can only be called inside this file
static void doSomething3(void)
{
//function guts here
}
static void doSomething4(void)
{
//function guts here
}
答案 3 :(得分:0)
直接在.c
文件中将这些函数声明为静态函数,并在同一文件中提供函数的定义:
在.c文件中:
static void internal_func1(void);
static int interal_func2(int a);
static void internal_func1(void)
{
/* body of internal_func1 */
}
static int interal_func2(int a)
{
/* body of internal_func2 */
}
添加static
关键字使这些函数对其他源文件不可见(函数标识符将具有内部链接)。