ページ 11

return 返値2つについて

Posted: 2012年6月20日(水) 16:24
by doku
VisualC++を使用しております、初心者です。
下記のコードで実行しますと出力結果として「 1 5 」が表示されてしまいます
私は「 5 5 」が表示される用に書いたつもりでしたので、なぜこうなってしまったのかどなたか教えては頂けませんでしょうか。

宜しくお願い致します。

コード:

#include<stdio.h>

int foo(int bra,int *c)
{
    int bar = 5;
   *c = 5;
   return bar,*c;
}
 
void main(int x,int &a)
{ 
    x,a = foo(x,&a);

    printf("%d %d\n",x,a);

}

Re: return 返値2つについて

Posted: 2012年6月20日(水) 16:35
by softya(ソフト屋)
C/C++には1つの戻り値を返す方法しかありません。
もし、2つ以上の値を返したい場合には構造体を使います。

[補足]
偶然、コンマ演算子扱いでコンパイルエラーになっていませんが意図した動作はしていないプログラムです。

「コンマ演算子とは - はてなキーワード」
http://d.hatena.ne.jp/keyword/%A5%B3%A5 ... B%BB%BB%D2

Re: return 返値2つについて

Posted: 2012年6月20日(水) 16:39
by naohiro19
GNU コンパイラーコレクションではコンパイルが通りません:
prog.cpp: In function ‘int foo(int, int*)’:
prog.cpp:7: warning: left-hand operand of comma has no effect
prog.cpp: At global scope:
prog.cpp:10: error: ‘::main’ must return ‘int’
prog.cpp:10: error: second argument of ‘int main(int, int&)’ should be ‘char **’
prog.cpp: In function ‘int main(int, int&)’:
prog.cpp:12: warning: left-hand operand of comma has no effect

Re: return 返値2つについて

Posted: 2012年6月20日(水) 16:45
by softya(ソフト屋)
たしかにあちこちにやばい記述がありますね。

コード:

#include<stdio.h>
 
int foo(int bra,int *c) ←braが使われていません。
{
    int bar = 5;
   *c = 5;
   return bar,*c; ←2つの値を戻せません。
}
 
void main(int x,int &a) ← mainでこの記述は未定義です。int &aはc++でのみ許されます。 [補足]mainはどこからxとaを受け取りつもりでしょう?
{ 
    x,a = foo(x,&a); ← 2つの戻り値は戻りません。単なるコンマ演算です。
 
    printf("%d %d\n",x,a);
 
}

Re: return 返値2つについて

Posted: 2012年6月21日(木) 22:42
by doku
申し訳ありません、返信操作ミスをしていたようです。
softya(ソフト屋)様、naohiro19様、ありがとうございました。
問題解決に向け構造体について勉強していきたいと思います。