1) > Мои аргументы в пользу того
- (я) прямая не имеет ни начала, ни конца, её длина равна бесконечности.
- (ты) мои аргументы в пользу того, что длина прямой вычисляется по формуле длины окружности.
Я затрудняюсь вести спор разговор на эту тему. Подпрограмма - кусок кода. Аппаратная реализация тут ни при чём. Адрес возврата сохраняется в стеке при вызове подпрограммы, но даже если он будет сохраняться где-то в другом месте - подпрограмма всё равно будет куском кода.
2) > Я считаю это уточнение непринципиальным
Опять же аргументы как в диалоге в пункте 1). Считать ты можешь что угодно (без обид), но общепринятое различие между функцией и процедурой именно в том, возвращает ли она что-то.
int f(int *a){ *a = 100; return *a; }
void p(int *a){ *a = 100; }В Си обе эти подпрограммы назвали бы функциями, но по смыслу функцией является только первая, а вторая - процедурой. Ты верно заметил, что процедура тоже что-то делает, изменяет, и к этому (иногда) можно даже обращаться в остальной программе. Однако следующие действия можно сделать только с функцией:
int b, c;
b = f(a);
c = f(a) + 100;Написать же
int d;
d = p(a);ты не можешь, потому что функция (процедура) p значение не возвращает.