我已经实现了一个像这样的函数指针数组:
// functions to point to
void foo1 (void) {};
void foo2 (char * str) {};
void foo3 (char * str1, char * str2) {};
//enum used for indexing
enum fp{
loc1 = 0,
loc2,
loc3,
size
};
typedef union {
void (*) (void);
void (*) (char *);
void (*) (char *, char *);
} genericfp_t;
genericfp_t myArray[size] = {foo1, foo2, foo3};
在我的代码中,我将严格使用枚举来调用函数指针数组:(例如)
myArray[loc1]();
myArray[loc2]('1');
有人向我指出,在代码安全方面,这仍然是不好的做法。他们争论最终可能会有人使用某些在运行时更改的变量来调用数组,最终会出现如下所示的情况:
int index = 0;
myArray[index]('1'); // inconsistent
您对此有何看法?