欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2505|回復: 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是個變量     函數太多了   這個調用方法可不可以    或者還有沒有其他的辦法







}                                   
}



回復

使用道具 舉報

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 .....................
回復

使用道具 舉報

ID:462827 發表于 2020-3-5 09:45 | 顯示全部樓層
帶參數以便確定延時多長不就行了
回復

使用道具 舉報

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)了
修改參數值直接在數組中調就行了,我想應該沒有比這個更直觀的了。
回復

使用道具 舉報

ID:342451 發表于 2020-3-5 10:09 | 顯示全部樓層
void delay1(u16 i)
     {delayus2x(u16 i );}
這樣就可以了,統一調用一個函數,往函數里填進去參數不就好了。
回復

使用道具 舉報

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);
....
}
回復

使用道具 舉報

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);
        }
}
延時函數這樣寫就可以了
回復

使用道具 舉報

ID:560467 發表于 2020-3-6 16:15 | 顯示全部樓層
不行,你可以利用選擇語句來實現這個功能
回復

使用道具 舉報

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]();
}
回復

使用道具 舉報

ID:370407 發表于 2020-3-7 10:36 | 顯示全部樓層
我用了  switch語句
回復

使用道具 舉報

ID:703167 發表于 2020-3-7 20:36 | 顯示全部樓層
你這樣寫當然是不可以的,可以用switch語句
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表