Есть даже функции, которые ничего не возвращают.
У них есть прототип, как
void useTwoNums(int, int);
Они иллюстрируют даже лучше, чем ваш пример, что не нужно ничего возвращать, даже меньше того, что каким-то образом использует два входных параметра и / или зависит от них.
Концепция, которую вы, похоже, упускаете, - это различие между «функциями» в математическом контексте и «функциями» в программировании. При программировании функция вполне может делать что-то, не возвращая что-либо. Одним из примеров является функция, которая просто красиво печатает входные значения, сравни printf()
,
http://en.cppreference.com/w/c/io/fprintf
Его возвращаемое значение может быть обработано внутри функции без возвращаемого значения для иллюстрации.
В крайнем случае будет функция без параметров и возвращаемого значения:
void DoSomethingInFreespace(void);
. Подобные функции позволяют получить данные для обработки, например, через другие входные каналы. Или это просто переработанные фрагменты кода, например для повторного использования, которые имеют достаточно богатый контекст, например глобальные или файловые локальные переменные.
Чтобы сделать ответ более полным, я объединю некоторые моменты из комментариев (в том числе от OP, который фокусируется на возвращаемых значениях):
Функции вызова по значению более близки к математическим функциям, и тогда их гораздо проще составить. (Жан-Батист Юнэс).
а также
позволяет отправлять значения, не беспокоясь о том, что какая-то функция изменит их. Это очень удобно. (njzk2)
Оба (и другие тоже) подчеркивают, что математическая функция не изменяет параметры; это что-то вроде «обещания», которое ценят программисты.
Поворот вокруг:
при использовании вызова по значению, если вы хотите, чтобы [значение в контексте вне функции, например] main, было изменено, мы должны вернуть результат (OP)
Другой угол:
при использовании вызова по ссылке нам не нужно возвращаться; он [параметр] сам изменяет [вне контекста вызываемой функции и может использоваться как] результат (OP)