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
进行编译,并且工作正常。
答案 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
值,因此您帖子中的代码将完美编译。我的猜测是该标准的早期版本的作者不愿意插入这个漏洞,因为这将是一个突破性的变化。