My program has code like this:
bigint bigSub(bigint minuend, bigint subtrahend)
{
bigint bigdiff;
bigInit(&bigdif f);
if(((cmp_ops(mi nuend.number, subtrahend.numb er))==1) &&
minuend.sign == POS && subtrahend.sign == POS)
{
bigdiff = abs_sub(minuend , subtrahend);
bigdiff.sign = POS;
bigdiff.size = strlen(bigdiff. number);
return bigdiff;
}
else if(((cmp_ops(mi nuend.number, subtrahend.numb er))==0) &&
minuend.sign == POS && subtrahend.sign == POS)
{
bigdiff = abs_sub(subtrah end, minuend);
bigdiff.sign = NEG;
bigdiff.size = strlen(bigdiff. number);
return bigdiff;
}
... /* several more if() blocks
/* no final return statement */
}
Some compilers don't complain at all; some issue warnings about missing
return values and some generate an error, interpreting the return value
as an int. What does the C standard say about this and what is standard
practice? I could use a goto, but...
bigint bigSub(bigint minuend, bigint subtrahend)
{
bigint bigdiff;
bigInit(&bigdif f);
if(((cmp_ops(mi nuend.number, subtrahend.numb er))==1) &&
minuend.sign == POS && subtrahend.sign == POS)
{
bigdiff = abs_sub(minuend , subtrahend);
bigdiff.sign = POS;
bigdiff.size = strlen(bigdiff. number);
return bigdiff;
}
else if(((cmp_ops(mi nuend.number, subtrahend.numb er))==0) &&
minuend.sign == POS && subtrahend.sign == POS)
{
bigdiff = abs_sub(subtrah end, minuend);
bigdiff.sign = NEG;
bigdiff.size = strlen(bigdiff. number);
return bigdiff;
}
... /* several more if() blocks
/* no final return statement */
}
Some compilers don't complain at all; some issue warnings about missing
return values and some generate an error, interpreting the return value
as an int. What does the C standard say about this and what is standard
practice? I could use a goto, but...
Comment