[英]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.