关于C语言中简化函数定义的问题

kingofghost 2017-05-12 08:00:27
比如,我要向定义一系列功能一样的函数:
func1(x)
func2(x)
func3(x)
func4(x)
.....

这样写起来代码很难看,而且很多重复,如果要修改这些函数的实现,得每个函数都要修改,重复的工作也很多,并且容易有遗漏。
我想知道,有没有一个办法,可以用一个函数来代替所有这个函数的定义,并且在函数调用的时候,根据不同的情况调用不同的函数?

先谢谢各位大神!
...全文
346 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofghost 2020-06-01
  • 打赏
  • 举报
回复
今天才看到这个贴几年了,都还没有结贴,居然都已经忘记了当时发帖的初衷了。不过复习了一遍,收到了各位大神的很大启发,受教了。 此贴正式结束。多谢大家。
AlbertS 2017-05-18
  • 打赏
  • 举报
回复
引用 10 楼 kingofghost 的回复:
[quote=引用 8 楼 shihengzhen101 的回复:] 我没有搞懂,你为什要定义那么多一样的函数
简单讲,因为这些函数,是作为回调函数注册到下层的,而注册回调函数时,会判断此函数是否已经被注册,如果已经被注册,则不再注册。由于软件框架是使用的C/S模式,注册回调会在不同的client发起,所以会造成前一个client注册了回调,后一个client再注册,就会注册失败。[/quote] 那你就用宏定义呗,这样写起来还方便点,可能可读性会差点
可爱的小莱 2017-05-18
  • 打赏
  • 举报
回复
#define 高招 但是弱弱的问一句,定义这么多一样的函数有必要吗。 函数名要有一定的意义,见名知意。 一个函数能实现,就在函数内部做分支呀。
kingofghost 2017-05-18
  • 打赏
  • 举报
回复
引用 8 楼 shihengzhen101 的回复:
我没有搞懂,你为什要定义那么多一样的函数
简单讲,因为这些函数,是作为回调函数注册到下层的,而注册回调函数时,会判断此函数是否已经被注册,如果已经被注册,则不再注册。由于软件框架是使用的C/S模式,注册回调会在不同的client发起,所以会造成前一个client注册了回调,后一个client再注册,就会注册失败。
赵4老师 2017-05-15
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
double A[300][100];
double valuex[300];
double valuey[300];
int i;
double fun00(double x,double y) {return x  +   y  ;};
double fun01(double x,double y) {return x*x+ 3*y  ;};
double fun02(double x,double y) {return x  + 2*y*x;};
//...  fun03(double x,double y) {return ...+...   ;};
//...
//...  fun98(double x,double y) {return ...+...   ;};
double fun99(double x,double y) {return x/2+20*y  ;};
double (*funNN[100])(double,double)={
    fun00,
    fun01,
    fun02,
//  fun03,
//  ...
//  fun98,
    fun99,
};
int main() {
    double x,y;
    int f,FN;

    for (i=0;i<300;i++) {
        valuex[i]=(double)i;
        valuey[i]=(double)i;
    }
    FN=3;
    for (i=0;i<300;i++) {
         x=valuex[i];
         y=valuey[i];
         for (f=0;f<FN;f++) A[i][f]=funNN[f](x,y);
    }
    for (i=0;i<3;i++) {
        for (f=0;f<FN;f++) printf("%lg ",A[i][f]);
        printf("\n");
    }
	return 0;
}
//0 0 0
//2 4 3
//4 10 10
赵4老师 2017-05-15
  • 打赏
  • 举报
回复
请牢记:源代码本身的书写是否结构化或面向对象或符合设计模式或敏捷…并不重要,重要的是你是否使用结构化或面向对象或符合设计模式或敏捷…的方法命名标识符、阅读、修改、检查、测试源代码。 意思是你程序结构看上去再合理,再简洁,也不一定比看上去一团乱麻的程序结构在运行或修改时更不易出错,更方便修改,出错了更容易找到哪里出错和具体出错的原因,更容易改正错误。 试对比 图书馆(对图书的分类够结构化了吧) 和 搜索引擎(可看作是扁平化任何结构数据,仅支持全文检索) 哪个处理信息更方便、更高效。 所以 与其费劲去重构代码让其看上去更简洁、更合理 不如费劲学习grep、sed、awk、……这类全文搜索和批处理编辑的工具。 结构越复杂,越难修改,越难除错。 有时(甚至大多数时候),看上去越合理、越简洁的代码,运行起来性能越差,出错时查找原因越难,找到出错原因后改正越费劲。 程序员要做的不是尽力避免错误,而是聚焦在快速发现并改正错误。真正以快速方式轻易解决错误,“快速的失败”远胜过“预防错误”。Fred George 前微软C#编辑器的开发主管Jay Bazuzi列出的一些有助于找到正确方向的问题;他觉得前同事们应该用这些问题来问自己;实际上不管在哪里工作的开发者们都应该经常问问自己这些问题: ◆“要保证这个问题不会再出现,我该怎么做?” ◆“要想少出些Bug,我该怎么做?” ◆“要保证Bug容易被修复,我该怎么做?” ◆“要保持对变化的快速响应,我该怎么做?” ◆“要保证我的软件的运行速度,我该怎么做?” 如果大多数团队都能不时问一下自己,必定会从中得益,因为这些都是真正强而有力的问题。
lzw2016 2017-05-15
  • 打赏
  • 举报
回复
多态------
AlbertS 2017-05-15
  • 打赏
  • 举报
回复
我没有搞懂,你为什要定义那么多一样的函数
FancyMouse 2017-05-13
  • 打赏
  • 举报
回复
功能一样为啥要一系列函数不是一个函数?
Canceled_bdflyao1 2017-05-13
  • 打赏
  • 举报
回复
#define正解
图灵狗 2017-05-13
  • 打赏
  • 举报
回复
其实就是函数指针数组,参考 http://blog.csdn.net/chenglibin1988/article/details/8916534
引用 楼主 kingofghost 的回复:
比如,我要向定义一系列功能一样的函数: func1(x) func2(x) func3(x) func4(x) ..... 这样写起来代码很难看,而且很多重复,如果要修改这些函数的实现,得每个函数都要修改,重复的工作也很多,并且容易有遗漏。 我想知道,有没有一个办法,可以用一个函数来代替所有这个函数的定义,并且在函数调用的时候,根据不同的情况调用不同的函数? 先谢谢各位大神!
xian_wwq 2017-05-13
  • 打赏
  • 举报
回复
lz可以搜下 “c语言 策略模式” 基本思想是用函数指针
自信男孩 2017-05-12
  • 打赏
  • 举报
回复
建议定义函数指针,将具有相同参数(类型,个数)和相同返回值的函数用一个函数指针。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧