0
 #include<stdio.h>
int f(int a)
{
  a > 20? return(10): return(20);
}
int main()
{
    int f(int);
    int b;
    b = f(20);
    printf("%d\n", b);
    return 0;
}

我遇到了以下错误

表达式语法

函数应该返回一个值

参数 a 从未使用过

4

4 回答 4

3

C 中的条件运算符 ( ?:) 仅将表达式作为操作数。

C99 §6.5.15 中的语法:

条件表达式:
逻辑或表达式
逻辑或表达式?表达式:条件表达式

return 语句不是表达式,而是语句。因此,您不能return在操作数中添加语句。

您可以使用以下内容重写您的函数:

return a > 20 ? 10 : 20;

边注。GCC(和 clang,可能还有其他)有一个称为语句表达式的扩展,在这种情况下,您可以使用它在条件中填充 return 语句:

a > 20 ? ({return 10;}) : ({return 20;});

(我提倡这样做;但可能有它的用途。)

于 2013-01-10T15:00:04.350 回答
2

两件事情:

首先,您的错误来源,您使用的三元运算符错误:

int f(int a)
{
  return (a > 20? (10): (20));
}

a > b ? x : y将返回x或返回y给您,您可以存储该值:

result = a > b ? x : y;

或者在这种情况下,您可以从函数中返回。

第二行:

int f(int);

没用,应该删除


您尝试这样做的方式错误的原因是因为?:期望的语法在右侧有一个表达式?

编程语言中的表达式是显式值、常量、变量、运算符和函数的组合。

return不是表达式,而是语句(语句是命令式编程语言中最小的独立元素。)

因此,您可以return使用表达式(三元运算的结果)。

于 2013-01-10T14:42:06.233 回答
1

正确的实现如下:

 #include<stdio.h>
int f(int a)
{
  return a > 20? 10: 20;
}
int main()
{
    int f(int);
    int b;
    b = f(20);
    printf("%d\n", b);
    return 0;
}
于 2013-01-10T14:41:04.497 回答
0

OP要求解释,而不是更正。以下是实际答案:

表达式语法:您尝试使用return语句作为 ?: 运算符的参数。这段代码是错误的,因此编译器将其丢弃并继续编译

函数应该返回一个值return:由于第一个错误,函数中没有有效值f

从未使用参数 a:由于第一个错误,函数a中未使用参数f

于 2013-01-10T15:02:28.533 回答