我有一堆C函数,它们被分配给一个函数指针数组,类似于这样:
typedef int (*func)(int);
int SomeLongName1(int a) {
// ...
}
// ...
int SomeLongName1000(int a) {
// ...
}
func f[] = { SomeLongName1, ... , SomeLongName1000 };
这是一项繁琐的工作,容易出现错误。例如,函数名称可能存在拼写错误,导致一个有效的函数仍被命名为错误的函数。或者,如果在末尾添加了新函数,则可能会忘记显式添加到函数指针列表中。
为了避免显式声明函数指针数组,我尝试过各种技巧,比如宏,但这样会使代码难以理解,需要了解宏的工作原理,而且我通常对它们不满意。
我想做的是像这样的事情:
typedef int (*func)(int);
func f[] = {
int SomeLongName1(int a) {
// ...
}
// ...
int SomeLongName1000(int a) {
// ...
}
};
这样,数组将自动创建,如果有某种方法可以在末尾放置一个空指针,以便我可以确定有多少函数指针,那就太好了。
然而,以上内容不是有效的C语言,我也找不到任何实现这个目标的方法。如果是编译器特定的东西(例如GCC扩展),那也没关系。
所有的函数在编译时都是静态已知的,所以我想避免对函数指针数组进行任何运行时初始化 - 即使我找到一种方法也是如此。
这个相关的问题 How to define an array of functions 看起来是在问同样的问题,但没有引申到逻辑上的结论。具体来说,我不希望为了节省时间和避免错误而重新输入我已经输入过的任何内容。