GCC:从C中的void函数返回语句

msc*_*msc 2 c gcc void

void bar()意味着bar什么都不返回.我很想知道,如果void什么都不返回,为什么编译器(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;
}
Run Code Online (Sandbox Code Playgroud)

我编译使用gcc -Wall myprog.c,它工作正常.

das*_*ght 5

在C99中不允许使用此构造:

return 没有表达式,在函数中不允许返回值(反之亦然)

使用正确版本的标准合规性进行编译会产生相应的错误:

prog.c:11:16:错误:ISO C禁止'返回'表达式,函数返回void [-Werror = pedantic]

return foo(); // Note this return statement.
       ^~~~~
Run Code Online (Sandbox Code Playgroud)

至于为什么这适用于旧版本的C,原始的K&R缺少void关键字,所以程序员想要明确表示该函数不返回任何东西是使用预处理器#define VOID int或类似的东西.当然,这个"穷人void"允许返回一个int值,所以你帖子中的代码可以完美编译.我的猜测是该标准的早期版本的作者不愿意插入这个漏洞,因为这将是一个突破性的变化.