首页 > 解决方案 > 在 C 中-“一次”多次将值返回给函数

问题描述

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

调用会导致每个fork()return语句执行一次,父函数怎么包含casereturn呢?

这个想法看起来像这样:

  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);

重要的要求是它必须在“案例”中完成,因为“存储”数据和“返回”以检索它不是一个选项,因为接收到的帧数量。

到目前为止,从长远来看,应用的解决方案会导致资源的高使用率。试图杀死子进程会导致僵尸进程,从长远来看,僵尸进程也会对资源产生狡猾的行为。

提前感谢您的任何想法!

标签: creturn-value

解决方案


在 C 中,每个函数只能返回一次。第一个 return 语句之后的任何代码都不会运行。如果你希望一个函数有多个输出,你有两个选择:

1) 通过作为参数传递给函数的指针或引用提供输出值。

2) 有一个结构返回类型并随着函数的进行填充结构的值,然后在函数执行路径的末尾返回一次填充的结构。


推荐阅读