GCC:Return 来自 C 中 void 函数的语句

GCC : Return statement from a void function in C

void bar() 表示 bar returns 什么都没有。我很想知道,如果 void returns 什么都没有,那么 为什么编译器 (GCC) 在编译以下程序时不给出任何警告或错误?

#include <stdio.h>

void foo (void)
{
        printf("In foo() function\n");
}

void bar (void)
{
        printf("In bar() function\n");
        return foo(); // Note this return statement.
}

int main (void)
{
        bar();
        return 0;
}

我已经使用 gcc -Wall myprog.c 进行了编译,并且运行良好。

此构造在 C99 中已被禁止:

return without expression not permitted in function that returns a value (and vice versa)

使用正确版本的标准合规性打开 produces 一个适当的错误:

prog.c:11:16: error: ISO C forbids ‘return’ with expression, in function returning void [-Werror=pedantic]

return foo(); // Note this return statement.
       ^~~~~

至于为什么这适用于旧版本的 C,原来的 K&R 缺少 void 关键字,所以想要明确表示该函数不 return 任何东西的程序员正在使用#define VOID int 或类似的预处理器。当然,这个“穷人的 void”允许 returning 一个 int 值,因此来自您的 post 的代码可以完美编译。我的猜测是该标准的早期版本的作者不愿意填补这个漏洞,因为这将是一个重大变化。