簡體   English   中英

了解如何將出現在main(){}中的代碼轉換為C中的一個或多個函數

[英]Understanding how to turn a chunk of code that appears in main(){} into a function or functions in C

我正在開發一個用戶空間驅動程序,該驅動程序通過發送和接收報告(這是一種隱藏的設備)從設備讀取數據。

這是我的初始代碼http://pastebin.com/ufbvziUR

編輯注:從答案和評論的聲音看來,我似乎需要將我的C代碼包裝在一些Objective-C內,因為要使用此驅動程序的應用程序是用Objective-C編寫的。

到目前為止,我已經將所有代碼添加到main()函數中,並且我可以抓取數據並將其打印到日志窗口,其主要目的是注銷緩沖區數組。 但是,此代碼將是一個更大的應用程序的一部分,並且需要通過調用來運行,而不僅僅是自動運行。

所以我想我會將出現在main()所有代碼包裝在一個名為getData()的大型函數中。 我想在運行此函數時返回一個名為char buffer[]的數組(一個充滿字節的char數組)。 我最初宣布它的想法是這樣的,因為我知道您不能真正從函數中僅通過指針返回數組,所以我只允許調用方分配緩沖區並傳遞其大小。

char *getData(int user){
    unsigned char *buffer = malloc(2800);
    // ... do all the stuff

   return buffer;
}

然后在main()

int main(){
   int user = 1;

   unsigned char *buffer = getData(user);
}

這是正確的方法嗎?

這里有些事情讓我感到不對。 首先是將那么多代碼包裝到一個函數中,然后兩個我不確定在我的一個錯誤檢查returns 1;時如何中斷該函數returns 1; 因為此函數將需要返回一個數組。 我對C還是很陌生,當我沒有可使用的對象或類時,對於如何實現這一點感到困惑。

void getData(unsigned char *buffer, int user){...}

定義一個不返回任何東西的函數。

如果要返回某個值-例如錯誤代碼,則需要一個返回int的函數。

int getData(unsigned char *buffer, int user){...}

要退出函數而返回void有所不同,然后到達函數的末尾,也可以使用return但不帶任何參數。

正如您已經注意到的,您沒有將數組傳遞給函數,因此根本沒有理由返回它。 如果需要,可以返回指針,但不需要這樣做。 主要功能知道數組在哪里。

通常認為,保持main越短越好。 您還可以將getData分成較小的函數,這些函數可使代碼更具可讀性。 例如,您可以使每個用# pragma mark - ...# pragma mark - ...一個單獨的函數。 甚至更好,請查看程序中是否有任何部分在做相同或相似的事情。 然后,您可以將此功能概括為一個功能並多次使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM