函数不返回值是什么意思?

时间:2020-02-07 17:43:43

标签: c function

一个函数不返回值是什么意思?您如何在程序中说明这一点?函数如何执行有用的操作?没有任何返回值的含义是什么?

2 个答案:

答案 0 :(得分:1)

一个函数不返回值是什么意思?

这意味着该函数不会将值显式返回给调用方。

您如何在程序中说明这一点?

您可以通过为函数指定返回类型void来声明它。此返回类型向编译器表示该函数未返回值。

那么函数如何执行有用的操作?

它可以执行第5.1.2.3 2节(ISO / IEC 9899:2011)中指定的一种或多种副作用:

访问易失性对象,修改对象,修改文件或调用执行任何这些操作的函数都是副作用,它们是执行环境状态的变化。表达式的 Evaluation 通常包括值计算和副作用的产生。左值表达式的值计算包括确定指定对象的身份。

答案 1 :(得分:1)

该功能的潜在影响包括:

  • 返回值。
  • 修改对象,包括函数可以通过指针访问的对象或具有外部链接的对象。
  • 如上所述,访问易失性对象。 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标准之外的事情的一种方法,例如向物理设备发送命令或数据。