繁体   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