Потенциальные эффекты функции включают в себя:
- Возвращение значения.
- Изменение объекта, включая либо объекты, к которым функция может получить доступ через указатели, либо объекты с внешней связью.
- Доступ к энергозависимому объекту, как указано выше. 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, такие как отправка команд или данных на физические устройства.