Эксперимент с return - C (СИ)
Формулировка задачи:
Из книжки Кернигана и Ритчи:
Глава 1. Функции.
Под
Авторы имели в виду отсутствие значения оператора return (например, return; ) или отсутствие самого оператора return? Потому что современный компилятор gcc выдает ошибку, если не задать return при указании возвращаемого значения в функции.
Если же не писать return в функции с возвращаемым значением, компилятор не выводит даже предупреждения об этом, но возвращает значение последней инструкции в теле функции, то есть подставляет к ней return.
Вывод:
Но если компилятор подставляет return к последней инструкции, то почему при
возвращается 1, а не количество отображенных символов?
Функция не обязательно возвращает какое-нибудь значение. Инструкция return без выражения только передает управление в ту программу, которая ее вызвала, не передавая ей никакого результирующего значения. То же самое происходит, если в процессе вычислений мы выходим на конец функции, обозначенный в тексте последней закрывающей фигурной скобкой. Возможна ситуация, когда вызывающая функция игнорирует возвращаемый ей результат.
Инструкция return без выражения только передает управление...
#include <stdio.h>
int test ( int, int );
int main ( void ) {
int m = 3, n = 5;
printf ( "value until: %3d %3d\n", m, n );
printf ( "value after: %3d\n", test ( m, n ) );
return 0;
}
int test ( int m, int n ) {
int i = 13, j = 17;
n = 33;
++m;
}
value until: 3 5
value after: 4
int test ( int m, int n ) {
int i = 13, j = 17;
n = 33;
++m;
printf ( "Finish" );
}Решение задачи: «Эксперимент с return»
textual
Листинг программы
void test(int a, int b)
{
int i;
if (a > b)
{
printf("Error\n");
return;
}
for (i = a; a < b; i++) printf("%d\n", i);
}
Объяснение кода листинга программы
- Объявлены две переменные типа int — a и b.
- Если a больше b, то выводится сообщение об ошибке и функция возвращает управление.
- Иначе, инициализируется переменная i значением a.
- И выполняется цикл от i до b с шагом 1.
- В каждой итерации выводится значение i.
- Если a меньше b, то цикл продолжается.
- Если a равно или больше b, то цикл завершается.
- Возвращается управление.