#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;});
(私はそれをすることを提唱していますが、それには用途があるかもしれません。)
2つのこと:
まず、エラーの原因です。三項演算子を間違って使用しています:
int f(int a)
{
return (a > 20? (10): (20));
}
a > b ? x : y
が返されるx
かy
、あなたに返されます。値を保存できます。
result = a > b ? x : y;
またはこの場合、関数から返すことができます。
この行の 2 番目:
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