Функция может вернуть только один объект, используя оператор return.
В этом операторе возврата
return div,mul;
используется выражение с оператором запятой. Его значение является значением правильного операнда. Таким образом, фактически, поскольку выражение div
не имеет побочных эффектов, оператор возврата эквивалентен
return mul;
из C стандарта (оператор 6.5.17 запятой)
2 Левый операнд оператора запятой оценивается как пустое выражение; существует последовательность между его оценкой и оценкой правого операнда. Затем вычисляется правый операнд; результат имеет свой тип и значение. И компилятор выдаст ошибку для вызова printf, потому что не хватает аргументов.
Либо объявите в качестве возвращаемого типа структуру, например,
struct Result
{
int div;
int mul;
};
struct Result divmul( int v1, int v2 )
{
struct Result result = { v1 / v2, v1 * v2 };
return result;
}
, а затем в main
int main( void )
{
int val1 = 50, val2 = 10;
struct Result result = divmul( val1, val2 );
printf( "%d %d\n", result.div, result.mul );
}
Или вернуть результат из параметров функции (так называемые выходные параметры)
void divmul( int *v1, int *v2 )
{
int div = *v1 / *v2;
int mul = *v1 * *v2;
*v1 = div;
*v2 = mul;
}
И в main
int main( void )
{
int val1 = 50, val2 = 10;
divmul( &val1, &val2 );
printf( "%d %d\n", val1, val2 );
}
Обратите внимание на согласно стандарту C функция main без параметров должна быть объявлена как
int main( void )