重吉
Lv 6
重吉 發問時間: 電腦與網際網路程式設計 · 1 0 年前

關於.c 檔內容的問題

一支.C的程式包含有

--------------------------------------------------------------

#include "gpio.h"

IPU_THRESH ipuThresh =

{

0x05,

0x0f

};

s32 ipuSetColorMatrix(s16 *);

s32 ipuSetGamma(IPU_GAMMA*);

void ipuStop(void);

s32 ipuInit(void)

{

...

return 1;

}

s32 ipuSetThresh(IPU_THRESH * pThresh)

{

...

return 1;

}

s32 ipuSetColorMatrix(s16* pMatrix)

{

...

return 1;

}

void ipuTest(void)

{

...

}

void ipuGamma()

{

...

}

----------------------------------------------------------------

問題來了,

1. 為什麼在宣告function prototype時會有下列三種方式?

s32 ipuSetColorMatrix(s16 *);

s32 ipuSetGamma(IPU_GAMMA*);

void ipuStop(void);

這三種方式有什麼不同?或是在使用上會有何差異?

2. 另外,function body又有以下這五種差別?

s32 ipuInit(void)

{}

s32 ipuSetThresh(IPU_THRESH * pThresh)

{}

s32 ipuSetColorMatrix(s16* pMatrix)

{}

void ipuTest(void)

{}

void ipuGamma()

{}

a. 有的用是void,有的用s32?有什麼不同及差異?

b.還有它在function後面的()裡

有的是(void),有的是(IPU_THRESH * pThresh)、(s16* pMatrix)

甚至只是(),這些在使用設定有什麼不同或差異?

3. 為什麼在s32的function需要return 1; 而void的function就不需return 1; ?

3 個解答

評分
  • Cloud
    Lv 4
    1 0 年前
    最佳解答

    1.

    這三個都只是函式的原型

    三個是各自不同的函式

    使用上就要看各自函式的內容了

    2.

    a.

    函式前面的void是指該函式不回傳任何值

    s32可能是定義在header裡面的一個型態

    照字面意思很有可能是32bits有號數

    b.

    ()與(void)皆是不傳入任何值

    (IPU_THRESH * pThresh)是傳入IPU_THRESH型態的指標

    (s16* pMatrix)是傳入s16型態的指標

    兩者都是傳入指標

    但是指標所指到的型態是不一樣的

    3.

    函式前的s32是要求回傳s32型態的值

    所以回傳1代表什麼意思要看程式怎麼寫

    void則是不回傳值,所以不需return 1;

    參考資料: 自己
  • 1 0 年前

    呵呵~

    樓上這位著眼的論點挺有趣的~ XD

    似乎理工的都比較務實,

    而且習慣性的就會使用分析與數據等來論證? XDD

    在這裡順便補充,

    以void為Type的Function,

    雖然不用回傳值,

    但依然可以使用return;這個指令,

    當程式跑到這條指令時,

    將會結束跳出這個Function,

    回到Call這個Function的程式碼段!

  • ?
    Lv 5
    1 0 年前

    chenchungchi 大大

    您都專家 5 級了,發問一律只給 5 點,會不會小氣了點?

    (除了三次問到孩子的問題、及一次結婚的問題以外。)

    有的(是有在顧帳號的,不是人頭戶)人才初學,問了40幾題,90%以上都是 20 點!

    所以,他一直在初學者。(他雖然答了 150 多題,採用率也比您高)

    您都 6800多點了,問了127題,96.85%是 5 點!

    實在...

還有問題?馬上發問,尋求解答。