- ベストアンサー
別のファイルの値を得るには?
ファイルを分割して関数を別のファイルにおいたのですが値を返してもらおうとしても帰ってきません どのようにしたら関数の値を得られますか? 大体このような感じですね ---main.cppの内容--- #include <stdio.h> #include "betu.h" void main( void ){ printf( "%d" , a ); } ---betu.hの内容--- static int a; void betu( void ); ---betu.cppの内容--- void betu( void ){ a = 5; }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「mainの中からbetu()を呼べ。」呼んでません。 void main( void ){ betu(); printf( "%d" , a ); } とかで呼び出さないとbetu()は実行されません。 # プロトタイプ宣言は呼び出しではありません。 >こちらのサイトを参考にするとポインタ変数を渡してその値を返すようにしてもらえば動くって事ですか? betu.cppがどうなっているのか?が問題です。 現状ではmain.cppからコールされていないので、betu.objがリンクされているかどうかも不明です。 betu.cppでbetu.hをインクルードしているのならば、 main.cppで参照しているaとbetu.cppで値を設定しているaは別のものですから期待した動作はしません。 Aさんの部屋にあるコップと、Bさんの部屋にあるコップ(どっちも同じ製品)で、Bさんの部屋のコップにジュースを入れたらAさんの部屋のコップにもジュースがわき出してきた。 なんてのがあり得るかどうか……。 Aさんの部屋のコップの場所を指定して、Bさんに「このコップにジュース入れて」と言えば入ってくるでしょうが…。 # 後者はポインタ渡しした場合。
その他の回答 (3)
- Wr5
- ベストアンサー率53% (2173/4061)
……確かに呼んでないですな……。
- Wr5
- ベストアンサー率53% (2173/4061)
掲示されているソースで省略している部分はありませんか? betu.cppでbetu.hをインクルードしていたりとか。 main.cppとbetu.cppの両方でbetu.hをインクルードしていた場合、 main.objとbetu.objの両方にstatic int a;が存在することになります。 「ファイルスコープ インクルード 変数」で検索するとよいでしょう。
補足
http://www.curiocube.com/mikata/progtips/ch06_globalscope.php こちらのサイトを参考にするとポインタ変数を渡してその値を返すようにしてもらえば動くって事ですか?
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
mainの中からbetu()を呼べ。 呼んでないから、aの値は不定のままだ(大抵は0で初期化されてるから0になるだろうけど) あと、関数betu()は「void型」つまり「値は返さない」って言ってるんだから、値を返してもらえる訳がない。寝言は寝て言え。 K&Rの本でも読んで、基礎からやり直しておいで。
補足
---main.cppの内容--- #include <stdio.h> #include "betu.h" void betu( void ); void main( void ){ printf( "%d" , a ); } ---betu.hの内容--- #pragma once static int a; void betu( void ); ---betu.cppの内容--- void betu( void ){ a = 5; } こんな感じにしてみましたが帰ってきませんでした。 あいにく貧乏なもので本を買えるお金がないのですよ
お礼
---main.cppの内容--- #include <stdio.h> #include "betu.h" void main( void ){ printf( "%d" , a ); } ---betu.hの内容--- static int a; void betu( int *a ); ---betu.cppの内容--- void betu( int *a ){ *a = 5; } ポインタを渡せばいけました。 ありがとうございました。 大本のソースコードは長いので間違っていそうな箇所だけ同じように書いてみました それはそれとしてお久しぶりです。