如何在C中返回两个值

我有以下功能:

int conMS(time_in_seconds) {
  int minutes, seconds;
  minutes = time_in_seconds / 60;
  seconds = time_in_seconds % 60;
  return minutes, seconds;
}

当在另一个函数中使用时,我收到几条错误消息:

warning: left-hand operand of comma expression has no effect [-Wunused-value]
warning: left-hand operand of comma expression has no effect [-Wunused-value]
 minutes,seconds = conMS(time);
warning: ‘minutes’ is used uninitialized in this function [-Wuninitialized]
warning: left-hand operand of comma expression has no effect [-Wunused-value]
 return minutes, seconds;

无论如何,有没有办法可以从函数返回两个值.这两个值可以是任何东西:int和char,float和int ……

我很抱歉,如果这对你来说很简单,但我是C的初学者,我能学到的唯一方法就是提问.另外,请尽量简化您的解释.

更新:这可以通过指针轻松完成,如下所示.

void conMS(int time, 
int *minutesP, /* a pointer to variable minutes */
int *secondsP) // a pointer to variable seconds //
{ 
    *minutesP = time / 60; 
    *secondsP = time % 60; 
}

稍后您将此函数称为:

conMS( 210, &minutes, &secs)    /* Where minutes, secs are defined integers */

这会将时间(以秒为单位)分配给变量分钟,并将秒数分配给变量secs

两种选择:

1)传递指向要修改的变量的指针.然后你的功能原型变成了

int conMS(time_in_seconds, int* minutes, int* seconds)

2)使用包含分钟和秒的结构作为成员并返回该结构.

我更喜欢(1),因为在(2)的情况下,我总是担心不必要的价值副本,并且当依赖返回值优化时我会感到紧张,因为它本质上是一个编译器选择而不是标准C的强制要求.此外,调用者语法comMS(time_in_seconds,& minutes,& seconds)告诉我要修改分钟和秒.

一些约定也随着选项(1)的增长而增长:零结果通常表示成功,非零表示失败.

相关文章
相关标签/搜索