c - 在 C 中-“一次”多次将值返回给函数
问题描述
问题是,如何在同一个“ case ”中多次向函数返回值?
调用会导致每个fork()
return语句执行一次,父函数怎么包含case
return呢?
这个想法看起来像这样:
case 15:
if((bufLen == 15) && ((buf[0] & 0x80) == 128)) {
int rx = buf[5];
int tx = buf[6];
pid_t demux = fork (2);
if (demux == 0) {
(*arity)++;
return append_int(outBuf, outLen, outSz, "RX", rx)
}
if (demux > 0) {
(*arity)++;
return append_int(outBuf, outLen, outSz, "TX", tx);
}
}
break; // case 15
其中目标函数具有以下参数形式:
append_int(char *buf, int off, int bufsz, char *key, int val);
重要的要求是它必须在“案例”中完成,因为“存储”数据和“返回”以检索它不是一个选项,因为接收到的帧数量。
到目前为止,从长远来看,应用的解决方案会导致资源的高使用率。试图杀死子进程会导致僵尸进程,从长远来看,僵尸进程也会对资源产生狡猾的行为。
提前感谢您的任何想法!
解决方案
在 C 中,每个函数只能返回一次。第一个 return 语句之后的任何代码都不会运行。如果你希望一个函数有多个输出,你有两个选择:
1) 通过作为参数传递给函数的指针或引用提供输出值。
2) 有一个结构返回类型并随着函数的进行填充结构的值,然后在函数执行路径的末尾返回一次填充的结构。
推荐阅读
- sql - 使用 SSIS 或 SQL 将多个 XML 整理成单个 XML
- ios - 第一次在 UITableView 中的 tableview 单元格 XIB 的高度不正确?
- php - 如何从传递给模态的变量中获取数据?
- node.js - NodeJS 中的 EventEmitters 是否会消耗资源?
- vb6 - 如何避免复选框放在前面
- javascript - 如何在 VueJS 中处理(或忽略)空属性?
- javascript - 请求被 Chrome66 上的 pause() 调用中断
- c# - 如何优雅地从定时器事件中捕获异常?
- c++ - 如何为具有另一个类的对象的类编写复制构造函数
- php - 即使使用正确的凭据,PHP ftp_login 也会失败