C语言:函数的独占调用

时间:2016-04-20 19:36:47

标签: c

我想知道你是否有可能以一种只有特定的其他方法B可以调用A的方式声明方法A.

理由是我想限制一种从main调用的方法(因为大学里的奇怪的测试算法)。如果main调用这个方法(这是一个帮助方法),整个程序将是垃圾。

那么,我怎么能禁止"禁止"主要(或任何其他方法)调用我的危险方法B?

3 个答案:

答案 0 :(得分:6)

b 放入单独的编译单元(自己的目标文件)中。向该编译单元声明 a static,使 b 全局可见,并且在特定头文件中也是已知的。

b 之外 以外的任何编辑单元将无法调用(甚至"请参阅") a >对于你的程序的其余部分是完全可见的,并且能够很好地调用 a

如果您想确保没有人能够更改此内容,请仅分发已编译的.o文件和相应的标题。

b.c:

static int a(int i){
   ...
}

int b(int x){
  return a(x + 100);
}

main.c中:

#include "b.h"
int main (int argc, char *argv[]){
   int c, d;

   c = b(100);     /* works */
   d = a(100);     /* will not compile */
}

答案 1 :(得分:1)

如何使用backtrace和backtrace_symbol函数。 backtrace man page

所以在这个函数A()里面检查它是否被特定的允许函数调用,然后只进行或返回(如果需要则返回错误或退出)。

注意:此方法不会避免将程序指令指针(程序计数器)置于危险函数A内(即使从不需要的main()调用)。

答案 2 :(得分:0)

如果要在运行时检查此项,可以使用backtrace或类似函数来确定调用方法的人员。请注意,如果不使用特殊的链接器选项,符号名称可能不可用。