找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2085|回复: 12
打印 上一主题 下一主题
收起左侧

请教各位大侠一个C语言函数调用问题

  [复制链接]
跳转到指定楼层
楼主
ID:370407 发表于 2020-3-4 20:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数太多了  如果想根据情况调用不同的函数太麻烦了   
如果把函数排上序号用变量的方式调用不知道可不可以
请问下各位大侠还有没有什么方法可以方便调用的谢谢

void delay1()
     {delayus2x(218 );}
void delay2()
     {delayus2x(223 );}
void delay3()
     {delayus2x(229 );}
void delay4()
     {delayus2x(234 );}
void delay5()
     {delayus2x(240 );



//---------------------------------

void main()     
{unsigned char a,b,c,d,e;
while(1)
{        
a=1;

delay a ();        //   a是个变量     函数太多了   这个调用方法可不可以    或者还有没有其他的办法







}                                   
}



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:452950 发表于 2020-3-4 22:31 | 只看该作者
不可以,每一个函数名需要单独声明。delay a()就是一个单独的函数,(delay a)是一个整体的函数名,编译时不可能把变量a的值赋给delay a()里面的a。
回复

使用道具 举报

板凳
ID:452950 发表于 2020-3-4 23:10 | 只看该作者
//你可以把所有的功能函数放到一个函数exp()里面,比如说:
uchar a;
void exp()
{
if (a==1)exp1();
if(a==2)exp2();
if(a==3)exp3();
}
void main()     
{
while(1)
{
if(Key==1){a=1;exp();}
if(Key==2){a=2;exp();}
if(Key==3)(a=3;exp();}
}
}
//先定义变量a,然后在主函数里面把变量a放到exp()函数里面去选择,应该能达到你要的效果,Key可以定义为对应按键的键值。switch语句也可以做到。但是这样你也得记得每一个编号对应函数的功能,不如直接调用不同的函数。
回复

使用道具 举报

地板
ID:213173 发表于 2020-3-5 08:05 | 只看该作者
写一个基本的延时函数 delay() ,用宏定义的方式预处理后即可正常调用。
#define delay1()  delay()
#define delay2()  delay1(),delay1()
#define delay3()  delay2(),delay1()
#define delay4()  delay3(),delay1()
#define delay5()  delay4(),delay1()
#define .....................
回复

使用道具 举报

5#
ID:462827 发表于 2020-3-5 09:45 | 只看该作者
带参数以便确定延时多长不就行了
回复

使用道具 举报

6#
ID:282850 发表于 2020-3-5 10:08 | 只看该作者
本帖最后由 f556 于 2020-3-5 10:44 编辑

用数组的方式吧:
tm[]={218,223,229,234,240};

当a=1时
delay(tm[a-1]);  //delay(218)了
修改参数值直接在数组中调就行了,我想应该没有比这个更直观的了。
回复

使用道具 举报

7#
ID:342451 发表于 2020-3-5 10:09 | 只看该作者
void delay1(u16 i)
     {delayus2x(u16 i );}
这样就可以了,统一调用一个函数,往函数里填进去参数不就好了。
回复

使用道具 举报

8#
ID:687694 发表于 2020-3-5 13:17 | 只看该作者
#define a 218
#define b 223
#define c 229
#define d 234
#define e 240
....
void main()
{
delay(a);
delay(b);
....
}
回复

使用道具 举报

9#
ID:695512 发表于 2020-3-5 14:01 | 只看该作者
void Delay(uint z)                //@11.0592MHz
{
        int i, j;
        for(z;z>0;z--)
        {
                i = 180;
                j = 73;
                do
                {
                while (--j);
                } while (--i);
        }
}
延时函数这样写就可以了
回复

使用道具 举报

10#
ID:560467 发表于 2020-3-6 16:15 | 只看该作者
不行,你可以利用选择语句来实现这个功能
回复

使用道具 举报

11#
ID:703395 发表于 2020-3-6 17:07 | 只看该作者
可以的利用函数指针
C语言抽象靠的就是
结构体 + 函数指针
不知道下面这个简单的小例子是不是你要的

typedef void(*pfnFunctionName)(void);
void delay1()
     {delayus2x(218 );}
void delay2()
     {delayus2x(223 );}
void delay3()
     {delayus2x(229 );}
void delay4()
     {delayus2x(234 );}
void delay5()
     {delayus2x(240 );

const int number = 5;
pfnFunctionName array[number] = {delay1, delay2, delay3, delay4, delay5};
for(int i = 0; i < number; i++)
{
    array[i]();
}
回复

使用道具 举报

12#
ID:370407 发表于 2020-3-7 10:36 | 只看该作者
我用了  switch语句
回复

使用道具 举报

13#
ID:703167 发表于 2020-3-7 20:36 | 只看该作者
你这样写当然是不可以的,可以用switch语句
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表