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
,它工作正常。
C99 中不允许使用此构造:
return
返回值的函数中不允许没有表达式(反之亦然)
使用正确版本的标准合规性进行编译会产生适当的错误:
prog.c:11:16: 错误:ISO C 禁止使用表达式“返回”,在返回 void [-Werror=pedantic] 的函数中
return foo(); // Note this return statement. ^~~~~
至于为什么这适用于旧版本的 C,原始 K&R 缺少void
关键字,因此想要明确该函数不返回任何内容的程序员正在使用预处理器 with#define VOID int
或类似的东西。当然,这个“穷人void
”允许返回一个int
值,所以你帖子中的代码可以完美地编译。我的猜测是该标准的早期版本的作者不愿意填补这一漏洞,因为这将是一个重大的变化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句