C语言中的函数访问范围

时间:2015-12-30 22:50:05

标签: c function scope

假设我有一个我想在内部使用的函数,例如Java或C ++中的private,但是我用C编写。在这种情况下,我有一个头文件和一个c文件实现和c文件有几个不应该对最终用户可用的功能。我可以不在头文件中声明这些函数以防止访问它们,或者这是一种不好的做法/有更好的方法吗?

4 个答案:

答案 0 :(得分:0)

制作此类内部函数static并将其保存在.c文件中。

请参阅static functions

  

如果仅从声明它的文件中调用函数,则将其声明为静态函数是合适的。当函数声明为static时,编译器现在将以某种方式编译为目标文件,以防止从其他文件中的代码调用该函数。

或者在C标准中:

  

6.2.2标识符的链接
...
  如果对象或函数的文件范围标识符的声明包含存储类   说明符static,标识符具有内部链接。 1

           

1 只有当函数声明位于文件范围内时,它才能包含存储类说明符。

答案 1 :(得分:0)

是的,可以使头文件中没有一些功能。

其他选项是将头文件分成2.一个用于内部使用,另一个用于外部用户。

除此之外,您还可以声明函数static,使其在文件范围之外不可见

答案 2 :(得分:0)

这就是你在这种情况下会做的事情,并为声明的函数添加静态。您可以在.h文件中声明公共函数,在.c文件中声明私有函数。

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

SomeFile.h

void doSomething1(void);
void doSomething2(void);

SomeFile.c

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