定义C函数数组

定义C函数数组,第1张

概述我有一堆C函数被分配给一个函数指针数组,沿着这条线: typedef int (*func)(int);int SomeLongName1(int a) { // ...} // ...int SomeLongName1000(int a) { // ...} 我有一堆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,似乎问了同样的问题,但没有把它带到它的逻辑结论.具体来说,我不想重新键入我已输入的任何内容,以节省时间并避免错误.

解决方法 我将用什么来解决这种情况(当然,当我无法避免它时),就是使用预处理.不是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函数数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240734.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存