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

Jma*_*man 3 c function

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

int main(void)
{
   // lots of code

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

    // lots of code

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

三个函数代码大约相同,所以我想合并为1个函数.我想将值标志传递给单个函数,如下所示:

  1. 如果"1"通过,确定利率,返回a double
  2. 如果"2"通过,确定贷款期限,返回a long
  3. 如果"3"通过,确定贷款本金,返回a long

我只想在调用函数时从函数返回1个值,但我想要返回的值可以是a double或a long.我想做这样的事情:

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

   if (foo)
      return double value;
   else
      return long value;
}
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?

dbu*_*ush 10

函数的返回类型在编译时是固定的.您无法根据传入的参数更改返回类型.

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

你可以在你的情况做的是提取您的每三项功能共同的代码放到一个单独的函数,那么三个原始函数可以调用常用功能,使大部分的工作,然后提取自己需要的部分,并返回.

例如:

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;
}
Run Code Online (Sandbox Code Playgroud)