プロが教える店舗&オフィスのセキュリティ対策術

return a, b;
のように2つの引数で値を返せることを最近になり
知りました。ところで以下のような使い方は可能でしょうか?
test( , )という2つの引数が必要な関数にnum()で
return 1,2としてひとつの関数呼び出しで引数2個分に
すると言うようなことです。


#include <stdio.h>

int test( int i, int j){
  printf("%d %d",i,j);
}
int num(void){
  return 1,2;
}
int main(void){
  test( num() );
}

A 回答 (3件)

return文で2つの戻り値を返すことはおそらくできません。

その書き方自体はコンパイルエラーにはなりませんが。

おそらくカンマ演算子の効果で

return a,b;
の「a,b」が順番に評価され、結果としてこの式の値がbとなり、bの値が返されているだけだと思います。

ほかの言語ではこのような記述が許されているものもありますが、少なくともCではこの記述は意図したとおりに動いてくれません。

残念ですがポインタや配列等を使って回避するなりしなくてはなりません。

よって質問文のプログラムはtestにひとつしか要素を渡していないことになりエラーとなります。
    • good
    • 0

できません。


C言語でreturn で返せるのは1つだけです。
カンマを使用できるのは、カンマ演算子として複数の式を評価することができるためです。
この場合、最後の式(値)が式の値になります。
return 1,2; なら 2
    • good
    • 0

できません。


構造体を返すのならできますが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!