#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
答案 0 :(得分:3)
C中的条件运算符(?:
)仅将表达式作为操作数。
C99§6.5.15的语法:
条件表达式:
逻辑OR-表达
逻辑OR表达式?表达式:条件表达式
return语句不是表达式,而是一个声明。所以你不能在操作数中添加return
语句。
您可以使用以下内容重写您的功能:
return a > 20 ? 10 : 20;
旁注。 GCC(和clang,可能还有其他人)有一个名为statement expressions的扩展名,您可以在这种情况下使用它来填充条件中的return语句:
a > 20 ? ({return 10;}) : ({return 20;});
(我主张这样做;但可能会有用途。)
答案 1 :(得分:2)
两件事:
首先,您的错误来源,您正在使用ternary operator错误:
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
表达式(三元运算的结果)。
答案 2 :(得分: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;
}
答案 3 :(得分:0)
表达式语法:您已尝试将return
语句用作?:运算符的参数。这个
代码片段是错误的,因此编译器将其丢弃并继续编译
函数应返回值:由于第一个错误,函数return
中没有有效的f
从不使用参数a :由于第一个错误,函数a
中未使用参数f