#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 从未使用过
#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 从未使用过
C 中的条件运算符 ( ?:
) 仅将表达式作为操作数。
C99 §6.5.15 中的语法:
条件表达式:
逻辑或表达式
逻辑或表达式?表达式:条件表达式
return 语句不是表达式,而是语句。因此,您不能return
在操作数中添加语句。
您可以使用以下内容重写您的函数:
return a > 20 ? 10 : 20;
边注。GCC(和 clang,可能还有其他)有一个称为语句表达式的扩展,在这种情况下,您可以使用它在条件中填充 return 语句:
a > 20 ? ({return 10;}) : ({return 20;});
(我提倡这样做;但可能有它的用途。)
两件事情:
首先,您的错误来源,您使用的三元运算符错误:
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
使用表达式(三元运算的结果)。
正确的实现如下:
#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;
}
OP要求解释,而不是更正。以下是实际答案:
表达式语法:您尝试使用return
语句作为 ?: 运算符的参数。这段代码是错误的,因此编译器将其丢弃并继续编译
函数应该返回一个值return
:由于第一个错误,函数中没有有效值f
从未使用参数 a:由于第一个错误,函数a
中未使用参数f