GCC:从 C 中的 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,它工作正常。

谢尔盖·卡利尼琴科

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在返回 void 的函数中调用返回 void 的函数的 return 语句

来自分类Dev

C中void函数中的return语句

来自分类Dev

在C中调用VOID函数

来自分类Dev

如何定义宏函数返回void,否则在C ++中

来自分类Dev

C中的void函数指针返回值

来自分类Dev

不清楚C中void函数的返回值

来自分类Dev

如何从C中的void函数返回动态数组?

来自分类Dev

从void函数返回到另一个void函数在C ++中合法吗?

来自分类Dev

CUDA:如果函数在constexpr中,“在非void函数末尾缺少返回语句”

来自分类Dev

C ++中void和非void函数之间的区别

来自分类Dev

C 中的 main 函数,有 void 和没有 void

来自分类Dev

C ++:从void函数返回void函数的返回值

来自分类Dev

void **函数参数c ++中的指针

来自分类Dev

从C中的main调用void *函数

来自分类Dev

获取C中的void(*)()函数指针的sizeof

来自分类Dev

C ++中void函数的重复计时

来自分类Dev

使用void函数在C ++中递增变量

来自分类Dev

在for循环C ++中调用Void函数

来自分类Dev

忽略void作为C ++中的函数结果

来自分类Dev

C ++在void函数中填充空数组

来自分类Dev

没有return语句的非void C函数实际上返回什么?

来自分类Dev

函数中的返回语句

来自分类Dev

C函数返回语句

来自分类Dev

类型No return,在函数中返回非void

来自分类Dev

如何在OCaml的函数中返回void?

来自分类Dev

C语言中的void函数返回什么?

来自分类Dev

void函数如何返回值?C ++

来自分类Dev

从具有'void'返回类型的函数中获取结果,而结果变量是输入参数之一-C ++

来自分类Dev

如何在Emscripten中包装或调用带有void作为返回值的C函数?

Related 相关文章

热门标签

归档