[英]use peprocessor macros to generate function calls
我有一些特定的函數原型
void init_channel_0(void);
void init_channel_1(void);
void init_channel_2(void);
void init_channel_3(void);
void init_channel_4(void);
void init_channel_5(void);
void init_channel_6(void);
void init_channel_7(void);
void init_channel_8(void);
void init_channel_9(void);
我想在循環中調用這些函數:
#define CHANNEL_INIT(channel) init_channel_##(#channel)
for (int i = 0; i < 10; i++) {
INIT_CHANNEL(i)
}
我嘗試使用一些宏定義來做到這一點,但它沒有用 有沒有辦法做到這一點?
您不能將運行時值傳遞給預處理器。 使用數組。
typedef void channel_func_t (void);
...
channel_func_t*const CHANNEL_INIT [] =
{
init_channel_0,
init_channel_1,
..
};
...
for (int i = 0; i < 10; i++) {
CHANNEL_INIT[i]();
}
你會寫一些元程序(用 C 或Python或Guile或Lua或GNU gawk或任何你喜歡的腳本語言)生成一個文件_do_init_channel.inc
包含
/// generated _do_init_channel.inc
init_channel_0();
init_channel_1();
等等...
你會在適當的地方#include "do_init_channel.inc"
。
當然,相應地調整您的構建自動化(例如您的Makefile
)。
在通過倫丁答案是正確的,但如果init_channel_
的k個函數是微小的,已知的,優化的編譯器可以很容易地內聯它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.