簡體   English   中英

C語言:函數的專用調用

[英]C Language: Exclusive calls of a function

我想知道是否可以通過僅特定其他方法B可以調用A的方式聲明方法A。

beeing的原因是我想限制一種方法來避免從main調用beeing(因為大學里奇怪的測試算法)。 如果main調用此方法(這是一個輔助方法),則整個程序將成為垃圾。

那么,如何才能“禁止”主(或任何其他方法)調用危險方法B?

ab放入單獨的編譯單元(其自身的目標文件)中。 向該編譯單元聲明一個 static變量,使b在全局范圍內可見,並且在特定的頭文件中也已知。

該編譯單元之外的任何內容都將無法調用(甚至“看到”) a ,而b在其余程序中是完全可見的,並且能夠很好地調用a

如果要確保沒有人能夠更改此設置,請僅分發已編譯的.o文件和適當的標頭。

公元前:

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 */
}

如何使用backtrace和backtrace_symbol函數。 回溯手冊頁

因此,在此函數A()內部檢查它是否被特定的允許函數調用,然后僅繼續或返回(如果需要,則返回錯誤或退出)。

注意:此方法不能避免使程序指令指針(程序計數器)進入危險函數A(即使從不需要的main()調用時)也是如此。

如果要在運行時進行檢查,則可以使用backtrace或類似的函數來確定誰調用了您的方法。 請注意,如果不使用特殊的鏈接器選項,則符號名稱可能不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM