Эксперимент с return - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Из книжки Кернигана и Ритчи: Глава 1. Функции.
Функция не обязательно возвращает какое-нибудь значение. Инструкция return без выражения только передает управление в ту программу, которая ее вызвала, не передавая ей никакого результирующего значения. То же самое происходит, если в процессе вычислений мы выходим на конец функции, обозначенный в тексте последней закрывающей фигурной скобкой. Возможна ситуация, когда вызывающая функция игнорирует возвращаемый ей результат.
Под
Инструкция return без выражения только передает управление...
Авторы имели в виду отсутствие значения оператора return (например, return; ) или отсутствие самого оператора return? Потому что современный компилятор gcc выдает ошибку, если не задать return при указании возвращаемого значения в функции. Если же не писать 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
Но если компилятор подставляет return к последней инструкции, то почему при
int test ( int m, int n ) {
    int i = 13, j = 17;
    n = 33;
    ++m;
    printf ( "Finish" );
}
возвращается 1, а не количество отображенных символов?

Решение задачи: «Эксперимент с 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);
}

Объяснение кода листинга программы

  1. Объявлены две переменные типа int — a и b.
  2. Если a больше b, то выводится сообщение об ошибке и функция возвращает управление.
  3. Иначе, инициализируется переменная i значением a.
  4. И выполняется цикл от i до b с шагом 1.
  5. В каждой итерации выводится значение i.
  6. Если a меньше b, то цикл продолжается.
  7. Если a равно или больше b, то цикл завершается.
  8. Возвращается управление.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5