C语言中的函数访问范围 假设我在java或C++中有一个我想用的函数,比如“代码>私有/,但是我在C.写的是这样的,我有一个头文件和一个 c>代码>文件实现,并且 c>代码>文件有几个功能,不应该对终端用户可用。我可以不在头文件中声明这些函数以阻止访问它们吗?或者这是一种不好的做法/有更好的方法吗

C语言中的函数访问范围 假设我在java或C++中有一个我想用的函数,比如“代码>私有/,但是我在C.写的是这样的,我有一个头文件和一个 c>代码>文件实现,并且 c>代码>文件有几个功能,不应该对终端用户可用。我可以不在头文件中声明这些函数以阻止访问它们吗?或者这是一种不好的做法/有更好的方法吗,c,function,scope,C,Function,Scope,将这样的内部函数设置为静态,并将其保存在.c文件中 见: 如果只从声明函数的文件中调用函数,则宜将其声明为静态函数。当一个函数被声明为静态时,编译器现在将编译成一个目标文件,以防止从其他文件中的代码调用该函数 或者在C标准中: 6.2.2标识符的链接 如果对象或函数的文件作用域标识符声明包含存储类 说明符静态,标识符具有内部链接。1 1函数声明只能在文件范围内包含存储类说明符static 是,可以使头文件中的某些函数不可用 其他选项是将头文件分隔为2个。一个供内部使用,另一个供外部用户使用 除

将这样的内部函数
设置为静态
,并将其保存在
.c
文件中

见:

如果只从声明函数的文件中调用函数,则宜将其声明为静态函数。当一个函数被声明为静态时,编译器现在将编译成一个目标文件,以防止从其他文件中的代码调用该函数

或者在C标准中:

6.2.2标识符的链接 如果对象或函数的文件作用域标识符声明包含存储类 说明符
静态
,标识符具有内部链接。1


1函数声明只能在文件范围内包含存储类说明符static


是,可以使头文件中的某些函数不可用

其他选项是将头文件分隔为2个。一个供内部使用,另一个供外部用户使用


除此之外,您还可以将函数声明为静态的,使它们在文件范围之外不可见,这与本例中的操作非常相似,并将静态添加到声明的函数中。您可以在.h文件中声明公共函数,在.c文件中声明私有函数

假设您有一个.h和.c文件:

SomeFile.h SomeFile.c
直接在
.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
关键字会使这些函数对其他源文件不可见(函数标识符将具有内部链接)。

这正是静态函数的用途。如果函数(或一般任何名称)在定义之前使用,则只需将其与定义分开声明。通常的做法是在使用前对其进行定义。这避免了冗余(对于具有外部链接的名称,这是无法避免的)。
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
}
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 */
}