簡體   English   中英

#define/macro 返回指向同一文件中給出的 function 的 function 指針

[英]#define/macro to return a function pointer to a function given in the same file

說我有代碼

void 1funct() {
(...)
}

void 2funct() {
(...)
}
etc., to 

void nfunct() {
(...)
}

是否可以將 function 指針返回到正確的 function 給定的 n 由

#define RET_FUNC_POINTER(n) (&nfunct); ?

是的 — 宏可以使用##將源代碼字符連接成單個標記:

#define RET_FUNC_POINTER(n) (&n ## funct);

(標記是源代碼中不可見的“構建塊”,是解析器在嘗試理解您的程序時從您的代碼生成的離散文本單元。它們大致類似於英語中的“單詞”,但它們不需要在 C++ 中用空格分隔,除非省略空格只會產生一個標記:例如int main vs intmain ,但int * vs int* 。使用##我們可以獲取兩個可能的標記intmain ,並使用預處理器而是強制它們進入intmain 。只是,您的 arguments 之一是宏的“變量”。請注意,您不需要加入&n ## funct部分,因為&已經是一個單獨的標記,並且應該保持這種狀態。)

但是,您可能希望考慮一個不錯的指針數組。

如果n在編譯時是靜態已知的(它必須是你的宏才能工作),那么除了混淆你的代碼(這不是一個收獲)之外,僅僅編寫&1funct&2funct等你並沒有真正獲得任何東西。

另請注意,您的 function 名稱不能以數字開頭; 您必須選擇不同的命名方案。

不知道為什么要這樣做(而不僅僅是使用const數組),但使用宏很容易做到:

#define RET_FUNC_POINTER(n) (n##funct)

暫無
暫無

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

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