使函数只能从另一个函数访问

时间:2009-06-15 21:17:57

标签: c function scope

如何声明和定义一个函数,以便只能从一个函数访问它?我可以在另一个函数中声明一个函数。但由于本地函数定义是非法的(根据Visual C ++),我必须在全局范围内定义函数,使其他函数可以调用它。

void f1() {
    void f1_private();
    f1priv();
}

void f1_private() {
}

void f2() {
    f1_private(); // Legal
}

是否可以使f1_private只能从f1访问?如果没有,本地声明的函数有什么用途?

6 个答案:

答案 0 :(得分:8)

您可以将这两个函数放在一个单独的文件中,并使您想要的那个不太明显static。 C中的静态函数只能从声明它的同一源文件中访问(类似于穷人的命名空间概念)。

然后,就像通常那样只在头文件中公开可见函数。

答案 1 :(得分:8)

您可以做的最好的事情是将两个函数放在它们自己的文件中,并声明“私有”函数具有静态链接(通过在声明前加上单词'static')。具有静态链接的函数只能通过其编译单元访问(在大多数构建系统中通常表示相同的文件)。

如果必须从其他地方调用非私有函数,则必须在其调用的每个文件中编写其原型,或者创建包含每个文件中包含的原型的头文件。从

答案 2 :(得分:3)

没有

但你可以用C ++编写,在类中声明方法,将方法设为私有,并使另一个类的朋友成为第一类。

答案 3 :(得分:0)

//在.c文件的底部

static void foo()
{
}

void dude()
{
    // foo only accessible here, unless you have forward
    // declared it higher up in the file
    foo();
}

但是,请注意,即使是静态方法也可以通过函数指针在文件范围外调用。

答案 4 :(得分:0)

对此发表评论。

//For use only by foo.

如果某人对使用它真的很感兴趣,尽管你付出了最大的努力,他们仍会找到一种方法。即使这意味着只是复制和粘贴代码,或重构代码。最好的办法是让他们知道他们不应该这样做。

如果它在一个类中,你也可以通过将其设为私有来封装它。如果不是,则为静态。

答案 5 :(得分:0)

您可以声明一个单独的类,其中包含一个函数的公共成员,以及一个只能从另一个函数访问的私有成员函数。如果只在一个类中使用它,你可以使它成为一个内部类。