![](/img/trans.png)
[英]The reason behind function pointer being the function name itself in c language?
[英]In C language How to Create a function at runtime using the function name being input as a string?
我正在閱讀c中的字符串運算符(#),它會執行令牌粘貼粘貼附加到其上的內容。我想知道是否有可能使用字符串運算符(和)動態創建一個函數(帶有void或non void參數)如果可能,請使用宏-#define)。 我想要以下代碼結構:
#define #function_name(/*void or non void */) void function_name(/*void or non void */)
char *function_name;
scanf("%s",function_name);
這樣的事情。 基本上,我試圖在運行時創建函數。
進行所需工作的一種駭人聽聞的方式(而且很可能您對該答案不滿意)如下:
C / C ++語言不提供即時執行文本作為代碼的機制(例如,像JavaScript的eval("var i = 0;")
)
C是一種靜態編譯的語言,因此,它不能使運行時創建函數變得容易,甚至無法實現。 您可以將所需的C代碼寫到.c文件,在系統上執行編譯器,然后動態加載對象庫。 在寫出初始.c文件的過程中,您可以根據需要命名函數。 簡而言之,使用宏無法完成您想做的事情。 使用我剛剛提到的方法是一個巨大的漏洞。 可能,但建議不要這樣做。
如果您只想重命名功能,或者從預先知道的有限功能集中進行選擇並可以編譯到程序中,則可以使用功能指針。 但這使我感到與您嘗試做的事情相反,因為函數指針為您提供了一個靜態名稱(符號),可用於調用變量函數。
如果確實需要重命名函數指針,則可以保留一個函數指針數組,並使用字符串映射對它們進行索引。 然后通過通過字符串(名稱)查找指針來調用函數。 該字符串當然是可變的,因此您可以更改函數的“名稱”。 但這是一條非常繞行的路線,老實說,我看不出這樣做的充分理由。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.