Что это значит, когда функция не возвращает значение? - PullRequest
0 голосов
/ 07 февраля 2020

Что это значит, когда функция не возвращает значение? Как вы утверждаете это в программе? Как тогда функция может выполнить что-нибудь полезное? что значит не иметь никакого возвращаемого значения?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Потенциальные эффекты функции включают в себя:

  • Возвращение значения.
  • Изменение объекта, включая либо объекты, к которым функция может получить доступ через указатели, либо объекты с внешней связью.
  • Доступ к энергозависимому объекту, как указано выше. 1
  • Изменение файла (потока).

Итак, если функция не выполняет вернуть значение, он все еще может изменить объект, как в:

void SetState(SomeStructure *S, int Value)
{
    S->State = Value;
}

или он может изменить поток:

void PrintValue(FILE *Stream, int Value)
{
    fprintf(Stream, "%d", Value);
}

Вы можете сказать компилятору, что функция не возвращает значение, объявив его с типом возврата void. Однако стандарт C также позволяет функциям с типами возврата, отличными от void, не возвращать значение. Например, у вас может быть функция, которая устанавливает или получает значение в зависимости от параметра команды:

int AccessState(int Command, SomeStructure *S,...)
{
    switch (Command)
    {
        case 0: // Get the state.
            return S->Value;
        case 1: // Set the state from the optional int parameter following S.
             va_list ap;
             va_start(ap, S);
             S->Value = va_arg(S, int);
             va_end(ap);
             break;
    }
}

В этом случае нет способа сообщить компилятору, что функция иногда не возвращает значение , но вам не нужно. Тем не менее, вы должны сообщить людям, которые используют и читают код, который иногда используется функцией, а иногда и не возвращает значение с четкой документацией в комментариях или где-либо еще.

Сноска

1 Доступ к энергозависимому объекту является одним из способов для C программ выполнять действия вне стандарта C, такие как отправка команд или данных на физические устройства.

1 голос
/ 07 февраля 2020

Что это значит, когда функция не возвращает значение?

Это означает, что эта функция не возвращает значение вызывающей стороне в явном виде.

Как вы это утверждаете в Программа?

Вы заявляете это, давая функции возвращаемый тип void. Этот тип возврата указывает компилятору, что функция не возвращает значение.

Как тогда функция может выполнить что-нибудь полезное?

Она может выполнять один или несколько побочных эффектов, как указано в § 5.1.2.3 2 (ISO / IEC 9899: 2011):

Доступ к энергозависимому объекту, изменение объекта, изменение файла или вызов функции, выполняющей любую из этих операций все побочные эффекты , которые являются изменениями в состоянии среды выполнения. Оценка выражения в целом включает как вычисления значений, так и инициирование побочных эффектов. Вычисление значения для выражения lvalue включает определение идентичности назначенного объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...