返回前的预期表达

时间:2009-12-14 13:43:13

标签: c

以下c语句未通过编译器.error是“返回前的预期表达式”。

           int max( int a,int b)
            {
                 a>b?return a:return b;
            }

是的,我知道我可以写这个以寻找最大值

            return a>b?a: b;

这是非常好的,并将完美运行。 但我的问题是第一个代码究竟是什么问题。为什么我们在三元opoerator中使用return,虽然我们可以在那里很容易地使用函数调用?

提前感谢!!!

5 个答案:

答案 0 :(得分:26)

C语法说''后面的东西'?并且':'必须是表达式 - return不是表达式,它是一个声明。

答案 1 :(得分:10)

三元的操作数?:是表达式。 return语句是一个语句,而不是表达式。

答案 2 :(得分:6)

三元表达式的第二和第三部分应该产生值,而不是像示例中的return语句。

答案 3 :(得分:6)

?:是一个操作符而不是一个控制流构造,因此操作数的整个内容必须是一个表达式,而返回语句(或任何语句)都不是有效的子表达式。

?:不仅仅是if-else的简写(它是一个控制流构造);它在语义上是不同的。

if( a > b ) return a; else return b;
另一方面,

是你想要做的,并且完全有效(如果风格上可能是不明智的)。

答案 4 :(得分:1)

三元运算符需要表达式,return是一个声明。

有关条件运算符here的更多信息。