c函数返回两种可能类型之一

标签 c function

我目前使用三个不同的函数来返回一个数值(一个返回一个double,另外两个返回一个long):

int main(void)
{
   // lots of code

    dRate = funcGetInterestRate();
    lMonths = funcGetTerm();
    lPrincipal = funcGetPrincipal();

    // lots of code

    return 0;
}

这三个函数的代码大约有 90% 相同,所以我想合并为 1 个函数。我想像这样将一个值标志传递给单个函数:

  1. 如果“1”通过,确定利率,返回一个double
  2. 如果“2”通过,确定贷款期限,返回一个long
  3. 如果“3”通过,确定贷款本金,返回一个long

我只想在调用函数时从函数返回 1 个值,但我想返回的值可以是 doublelong。我想做这样的事情:

void funcFunction(value passed to determine either long or double)
{
   // lots of code

   if (foo)
      return double value;
   else
      return long value;
}

有没有简单的方法来做到这一点?

最佳答案

函数的返回类型在编译时是固定的。您不能根据传入的参数更改返回类型。

但是,由于您的主要目标是删除函数中的重复代码并合并它们,因此可以用不同的方式解决这个问题。换句话说,这是一个 XY problem .

在你的情况下你可以做的是将你的三个函数中的每一个中的公共(public)代码提取到一个单独的函数中,然后这三个原始函数可以调用公共(public)函数来完成大部分工作,然后提取它们需要的部分并返回那个。

例如:

struct loan {
    double rate;
    long term;
    long principal;
};

void calcLoan(struct loan *loan)
{
    // do stuff
    loan->rate = // some value        
    loan->term = // some value        
    loan->principal = // some value        
}

double funcGetInterestRate()
{
    struct loan loan;
    calcLoan(&loan);
    return loan.rate;
}

long funcGetTerm()
{
    struct loan loan;
    calcLoan(&loan);
    return loan.term;
}

long funcGetPrincipal()
{
    struct loan loan;
    calcLoan(&loan);
    return loan.principal;
}

关于c函数返回两种可能类型之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53978070/

相关文章:

c - 为什么 getrandom() 不编译?

c - 如何连接到宽带共享 IP 中的客户端

python - 为什么 functools.partial 不返回一个真正的函数(以及如何创建一个真正的函数)?

c - 无法创建堆栈。出现段错误。怎么办?

C 版本的 strpos 和 substr?

c - 嵌套函数及其用途,一个接一个调用的函数?

function - 在语言层面, `ccall` 到底是什么?

algorithm - 将一个矩形装入另一个矩形

c - core.c 中的函数声明

c++ - 让子窗口继承父背景颜色?