当前位置: 首页 > 知识库问答 >
问题:

为什么在C中return语句作为返回类型对void起作用?

宗政海
2023-03-14

例如:

void message() //If i skip this declaration still it works
main()
{
    message();
}
void message()
{
    return 5; //also return 5.0 and return a(some variable) also works
}

由于void指的是“nothing is return”,那么我们在这里如何使用return语句。这是否意味着所有程序都返回一些东西,不管它是void还是其他返回类型?

我还有一个关于void作为返回类型的查询:

main()
{
    printf("%d",message());
}

void message()
{
}
void message(); //when I use the declaration

main()
{
    printf("%d",message());
}

void message()
{

}

共有1个答案

米元凯
2023-03-14

我对C89不是很确定,但在C11中,我可以在§6.8.6.4中看到

带有表达式的return语句不得出现在返回类型为void函数中。[...]

所以,您的代码违反了标准。

 类似资料:
  • 问题内容: 考虑以下JavaScript: 上面的代码片段中的方法返回的是正确的值,在这种情况下。但是,该方法返回。大多数其他语言不是这种情况。 但是,以下函数是正确的,并返回正确的值。 如果语法错误,它应该发出一些编译器错误,但不会。为什么会这样? 问题答案: 从技术上讲,JavaScript中的半冒号是可选的。但是实际上 , 如果它认为缺少某些换行符, 它只会为您插入它们 。但是它为您带来的决

  • 问题内容: 当我回答另一个问题时我遇到了一个带有顶层语句的Node.js模块。例如: 这可以正常工作并且没有错误并可以打印: 在标准输出中,但不是“ ”- 实际停止执行。 但是根据ECMAScript 5.1中 的语句规范, 语义学 如果ECMAScript程序 包含不在内的return语句,则在语法上_被视为 _不正确 。 在上面显示的程序中没有任何功能。 那为什么不扔呢? 问题答案: TL;

  • 我刚开始学C++,我试着做一个骰子游戏,用户输入一个1到6之间的数字,然后代码打印一个在这个范围内的随机数,如果y和z相同,你就赢了。 这是我的代码,但当我输入一个数组中没有的数字时,它的工作方式就好像它在数组中一样。 (输入是y)(数组是x)(你需要赢的数字是z) 此外,我可能会更改它,使它只读取数组,这样用户甚至可以放入骰子的边数,如果这样做顺利的话。

  • 问题内容: 当我通过redis EVAL运行此代码时,它不会返回任何结果。知道为什么这行不通吗? bug.lua 如果我初始化表,则仅打印该值。 问题答案: 如果您参考Redis 文档 ,则可以看到Redis将Lua表转换为Redis回复所使用的规则: Lua表(数组)-> Redis多批量回复( 如果有的话,将被截断为Lua数组中的第一个nil ) Lua表带有单个ok字段-> Redis状态回

  • 问题内容: 我编写了一个打印表格的程序。我没有在主函数中包含返回语法,但是无论何时我键入echo $?它显示12。 我的源代码: 我尚未编写return 12,但每次执行程序时它仍返回12。 谢谢。 问题答案: 正如swegi所说,这是未定义的行为。 正如史蒂夫·杰索普(Steve Jessop)等人所说,在C89之前,它是一个未指定的值,并在C99中指定(观察到的行为与C99不符)。 在大多数环

  • 问题内容: 我是Java的新手,这是什么意思?像吗? 如果第二个返回true,将不会执行,对吗? 问题答案: Return语句跳过功能范围的其余执行。 值得读: :http : //docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html :http : //docs.oracle.com/javase/tutorial/java/n