如何在C中实现访问说明符?

时间:2012-04-01 03:24:05

标签: c

我试图实现访问说明符(不确定是否称为访问说明符)

目的是使一个函数(func2)只能在一个地方(func1内)调用。

int func1 ()
{
   // Make func2 callable only here`
#define FUNC2_CALLABLE
   func2(); 
#undef FUNC2_CALLABLE
}

#ifdef FUNC2_CALLABLE
int func2 ()
{ 
  return 1;
}
#endif // FUNC2_CALLABLE

func2只能从func1调用,而不能从代码中的任何其他位置调用。

上述代码是否符合目的?任何其他建议

<编辑1>

这样做怎么样

 int func2() 
 { 
#ifdef FUNC2_CALLABLE 
 return 1; 
#endif 
 } 

这会有用吗? < /编辑1>

3 个答案:

答案 0 :(得分:1)

这会给你一个找不到func2的链接器错误(如果你使用func2将不会被定义)。

我认为您可能正在寻找 static

static int fake(int x) { return x * 2; }

int doSomething(int x) { int tmp = fake(x); doOtherThings(); }

假冒将不会存在于编译单元之外(基本上是文件)。

至于允许仅从另一个函数调用函数,这没有多大意义。如果这是您的最终目标,请简单地内联代码。

答案 1 :(得分:0)

没有真正的方法可以做到这一点。在标准C中可以做的最好的事情是使func2静态并将其定义在源文件的底部附近:

static int func2 ()
{ 
  return 1;
}

int func1 ()
{
   func2(); 
}

(end of file)

答案 2 :(得分:0)

也许您可以使用static关键字。

但同一文件中的所有代码都可以访问static的函数。其他文件无法访问它。