M
Marlene Stebbins
My program has code like this:
bigint bigSub(bigint minuend, bigint subtrahend)
{
bigint bigdiff;
bigInit(&bigdiff);
if(((cmp_ops(minuend.number, subtrahend.number))==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(minuend.number, subtrahend.number))==0) &&
minuend.sign == POS && subtrahend.sign == POS)
{
bigdiff = abs_sub(subtrahend, 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(&bigdiff);
if(((cmp_ops(minuend.number, subtrahend.number))==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(minuend.number, subtrahend.number))==0) &&
minuend.sign == POS && subtrahend.sign == POS)
{
bigdiff = abs_sub(subtrahend, 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...