如何声明和定义一个函数,以便只能从一个函数访问它?我可以在另一个函数中声明一个函数。但由于本地函数定义是非法的(根据Visual C ++),我必须在全局范围内定义函数,使其他函数可以调用它。
void f1() {
void f1_private();
f1priv();
}
void f1_private() {
}
void f2() {
f1_private(); // Legal
}
是否可以使f1_private只能从f1访问?如果没有,本地声明的函数有什么用途?
答案 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)
您可以声明一个单独的类,其中包含一个函数的公共成员,以及一个只能从另一个函数访问的私有成员函数。如果只在一个类中使用它,你可以使它成为一个内部类。