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,似乎问了同样的问题,但没有把它带到它的逻辑结论.具体来说,我不想重新键入我已输入的任何内容,以节省时间并避免错误.
解决方法 我将用什么来解决这种情况(当然,当我无法避免它时),就是使用预处理.不是C预处理器提供的那个,它没有在合理的语法中提供所需的功能,而是像m4这样非常强大的功能.使用m4,您的代码可能如下所示:
define(`functionList',`,0')define(`functionArrayMember',`define(`functionList',`,'FunctionList)')define(`buildFunctionArray',`{ functionList }')int functionArrayMember(SomeLongname1)(int a) { return a+1;}//...int functionArrayMember(SomeLongname1000)(int a) { return a+1;}func f[] = buildFunctionArray();
您只需要为functionArrayMember()和buildFunctionArray()提供正确的m4定义,并且您具有所需的功能.
总结以上是内存溢出为你收集整理的定义C函数数组全部内容,希望文章能够帮你解决定义C函数数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)