如何使用循环初始化指向函数的指针数组
How to initialize an array of pointers to functions with a loop
有没有办法获取 func1 到 func4 的所有地址,以便我可以在 for 循环中使用它们来初始化我的菜单?我有一种感觉,这可以通过某种宏观技巧来实现。我查看了 google 和 SO 但没有找到任何帮助。
...
void func1(void) { printf("func1\n"); }
void func2(void) { printf("func2\n"); }
void func3(void) { printf("func3\n"); }
void func4(void) { printf("func4\n"); }
int main(int argc, char** argv)
{
int num=0;
printf("Scanf: 0 - 4\n");
scanf(" %d", &num);
void (*menu[])(void) = {func1,
func2,
func3,
func4};
if(num <= 4) (*menu[num-1])();
...
Is there a way to obtain all the adresses of func1 to func4
不,这些功能的地址可能在非连续区域
I have a feeling this could be possible with some sort of macro
trickery.
您是否正在寻找一种同时声明和分配的方法?
在这种情况下:
#define PROTO(name) static void func##name(void) { printf("func"#name"\n"); }
#define EVENT(name) func##name,
#define EVENTS(EXEC) \
EXEC(1) \
EXEC(2) \
EXEC(3) \
EXEC(4)
EVENTS(PROTO)
int main(void)
{
void (*menu[])(void) = {EVENTS(EVENT)};
return 0;
}
输出:
static void func1(void) { printf("func""1""\n"); }
static void func2(void) { printf("func""2""\n"); }
static void func3(void) { printf("func""3""\n"); }
static void func4(void) { printf("func""4""\n"); }
int main(void)
{
void (*menu[])(void) = {func1, func2, func3, func4,};
return 0;
}
有没有办法获取 func1 到 func4 的所有地址,以便我可以在 for 循环中使用它们来初始化我的菜单?我有一种感觉,这可以通过某种宏观技巧来实现。我查看了 google 和 SO 但没有找到任何帮助。
...
void func1(void) { printf("func1\n"); }
void func2(void) { printf("func2\n"); }
void func3(void) { printf("func3\n"); }
void func4(void) { printf("func4\n"); }
int main(int argc, char** argv)
{
int num=0;
printf("Scanf: 0 - 4\n");
scanf(" %d", &num);
void (*menu[])(void) = {func1,
func2,
func3,
func4};
if(num <= 4) (*menu[num-1])();
...
Is there a way to obtain all the adresses of func1 to func4
不,这些功能的地址可能在非连续区域
I have a feeling this could be possible with some sort of macro trickery.
您是否正在寻找一种同时声明和分配的方法?
在这种情况下:
#define PROTO(name) static void func##name(void) { printf("func"#name"\n"); }
#define EVENT(name) func##name,
#define EVENTS(EXEC) \
EXEC(1) \
EXEC(2) \
EXEC(3) \
EXEC(4)
EVENTS(PROTO)
int main(void)
{
void (*menu[])(void) = {EVENTS(EVENT)};
return 0;
}
输出:
static void func1(void) { printf("func""1""\n"); }
static void func2(void) { printf("func""2""\n"); }
static void func3(void) { printf("func""3""\n"); }
static void func4(void) { printf("func""4""\n"); }
int main(void)
{
void (*menu[])(void) = {func1, func2, func3, func4,};
return 0;
}