关于return语句,Microsoft Visual Studio文档说
语法:
返回表达式;
其中expression被标记为可选。它继续
表达式的值(如果存在)将返回给调用函数。如果表达是 省略,函数的返回值是未定义的。
这很清楚,但另一方面,有一个空表达的概念。这让我感到困惑。认为空表达不是没有,而是作为一个空的表达,我会认为如果我们有一个函数
void foo(void)
{
return;
}
然后可以在允许空表达式的任何地方使用表达式foo()。例如,代码的行为
unsigned int i=0;
for(foo();i<10;i++) printf("%u",i);
将被定义。 我知道这可能没什么实际意义,但我想理解为什么在这种情况下,空表达式不是表达式。
答案 0 :(得分:4)
它被称为无效表达。您可以像for
一样在for
中使用void表达式。 void表达式只会产生副作用,即调用函数。
实际上,如果for
的第一个子句是任何类型的表达式,它将被计算为void表达式:
C99 6.8.5.3
void
陈述...如果子句-1是一个表达式,则在第一次评估控制表达式之前将其计算为void表达式。
和
C99 6.3.2.2
void
void表达式(具有类型
void
的表达式)的(不存在)值不应 以任何方式使用,隐式或显式转换({{1}}除外)不得 适用于这样的表达。如果任何其他类型的表达式被评估为void 表达式,其值或指示符被丢弃。 (评估void表达式 副作用。)
答案 1 :(得分:1)
我不知道C中是否存在“空表达式”这样的东西,但是如果有,那么你会把它与类型void
,和与此同时,你混淆了从非void
函数(这是非法的)返回“nothing”的行为,而忽略了for
循环的初始化表达式(这是合法的)。