c - 在 C 中 - 将值多次返回给函数 "at once"

标签 c return-value

问题是,如何在同一个“case”内多次向函数返回值?

fork() call 会导致每个 return 语句执行一次,包含 case 的父函数如何执行?返回?

这个想法看起来像这样:

  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) 具有结构体返回类型,并在函数执行时填充该结构体的值,然后在函数执行路径末尾返回填充的结构体。

关于c - 在 C 中 - 将值多次返回给函数 "at once",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51763730/

相关文章:

使用模数计算

c - 以下关于 C 编程中枚举的含义是什么?

c - 事件驱动的有限状态机 + 线程 : how to?

c - 如何捕获已收到 SIGSEGV 的进程列表

c# - 使方法从 lambda 返回

c - 执行失败是否有一般值(value)?

c - 如何测试具有内部状态的函数?

带返回值的 Java 错误/异常处理

C - 如果最大长度大于 50,则返回变量始终为空