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

时间:2017-03-22 05:51:31

标签: 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;
}

我使用gcc -Wall myprog.c进行编译,并且工作正常。

1 个答案:

答案 0 :(得分:5)

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

  没有表达式的

return在函数中不允许返回值(反之亦然)

使用正确版本的标准合规性进行编译,打开了produces相应的错误:

  

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

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

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

相关问题