【发布时间】:2017-03-22 05:51:30
【问题描述】:
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 编译,它工作正常。
【问题讨论】:
-
因为即使它什么也不返回,你仍然可以使用
return来中断函数。 -
@Havenard:你的评论没有意义。
-
你使用哪个版本的 gcc? 5 之前的版本默认为自 18 年以来已经过时的非标准 C90。使用更新的版本或特定标准 C,即 C11 - 至少 C99。
-
该代码被接受为扩展(它在 C++ 中有效),并且在非迂腐模式下不会打印任何警告,因为它似乎不太可能导致任何问题:您使用的是一致的返回foo 和 bar 的类型。