返回前的预期表达

maw*_*wia 2 c

以下c语句不通过编译器.error是"返回前的预期表达式".

           int max( int a,int b)
            {
                 a>b?return a:return b;
            }
Run Code Online (Sandbox Code Playgroud)

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

            return a>b?a: b;
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!!!

小智 26

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


Ric*_*ton 10

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


Joh*_*nck 6

预期三元表达式的第二和第三部分将产生值,而不是如示例中的return语句.


Cli*_*ord 6

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

?:(不是简单的简写if-else(控制流程构造); 它在语义上是不同的.

if( a > b ) return a; else return b;
Run Code Online (Sandbox Code Playgroud)

另一方面,你正在尝试做什么,并且完全有效(如果风格上可能是不明智的).