了解如何将main(){}中出现的代码块转换为C中的一个或多个函数

了解如何将main(){}中出现的代码块转换为C中的一个或多个函数,c,arrays,function,C,Arrays,Function,我正在开发一个用户空间驱动程序,它通过发送和接收报告(这是一个hid设备)来读取设备的数据 这是我的初始代码 编辑说明:从答案和评论的声音来看,似乎我需要将我的C代码包装在一些Objective-C中,因为将使用此驱动程序的应用程序是用Objective-C编写的 到目前为止,我刚刚将所有代码添加到main()函数中,我能够获取数据并将其打印到日志窗口,主要目的是注销缓冲区阵列。这段代码将是一个更大的应用程序的一部分,需要通过调用来运行,而不仅仅是自动运行 所以我想我应该将main()中出现的所

我正在开发一个用户空间驱动程序,它通过发送和接收报告(这是一个hid设备)来读取设备的数据

这是我的初始代码

编辑说明:从答案和评论的声音来看,似乎我需要将我的C代码包装在一些Objective-C中,因为将使用此驱动程序的应用程序是用Objective-C编写的

到目前为止,我刚刚将所有代码添加到
main()
函数中,我能够获取数据并将其打印到日志窗口,主要目的是注销缓冲区阵列。这段代码将是一个更大的应用程序的一部分,需要通过调用来运行,而不仅仅是自动运行

所以我想我应该将
main()
中出现的所有代码封装在一个名为
getData()
的大型函数中。当这个函数运行时,我想返回一个名为
charbuffer[]
(一个充满字节的字符数组)的数组。我最初的想法是这样声明的,因为我知道不能从函数返回数组,只能返回指针,所以我只让调用方分配缓冲区并传递大小

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

   return buffer;
}
那么主要是()

这是正确的做法吗

我觉得这里有几件事不对。首先是将那么多的代码包装到一个函数中,然后是两个。当我的一个错误检查
返回1时,我不太确定如何中断该函数
void getData(unsigned char *buffer, int user){...}
定义一个不返回任何内容的函数

如果您想返回一些值,比如实例错误代码,则需要一个返回int的函数

int getData(unsigned char *buffer, int user){...}
要退出函数返回
void
,然后以不同的方式到达函数的末尾,也可以使用
return
,但不带任何参数

正如您已经注意到的,您没有将数组传递给函数,因此根本没有理由返回它。如果需要,可以返回指针,但不需要这样做。main函数知道数组的位置


一般认为,保持主音尽可能短是一个好习惯。您还可以将
getData
划分为更小的函数,这将使代码更具可读性。例如,您可以将由
#pragma mark-…
标记的每个块作为单独的函数。或者更好,看看程序中是否有任何部分正在做相同或类似的事情。然后您可以将此功能概括为一个函数并多次使用。

我已经更新了我最初的代码想法,这样做是否更有效?数组是unsigned char类型,因此函数应该是这种类型,而不仅仅是char。但是除了这个细节之外,您所做的更改很有意义:)并且您可能希望将创建的缓冲区保存在main中的某个变量下,因此您需要
unsigned char*buffer=getData(user)谢谢,我也把它添加到了我的示例中。但另一个文件(实际上是用objective-C编写的)中的应用程序的另一部分如何访问main中定义的缓冲区呢?您可能需要从另一个程序调用
getData
,或者调用另一个程序,将缓冲区指针传递给它。以下是将两个程序合并为一个程序的一些起点:但似乎您无法轻松地用ansi c和objective c构建一个程序。在您的情况下,选择一种语言或通过管道在不同语言的程序之间传递数据可能是最简单的是无用的。您需要将它返回的内容分配给某些内容。@FilipeGonçalves谢谢,我更新了一些代码。
int getData(unsigned char *buffer, int user){...}