質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

16817閲覧

他の関数で定義している変数をmain関数で呼び出す方法

physics303

総合スコア89

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/10/20 05:34

編集2016/10/20 05:35

C言語の初心者です。

C

1#include <stdio.h> 2#include <math.h> 3double f(double); 4 5void main(void){ 6 7} 8 9double f(double){ 10int c=1.0; 11return (); 12}

という風にmain関数ではないほかの関数内で整数cが定義されています。
このcをmain関数に呼び出すことはできるのでしょうか。つまり、

C

1#include <stdio.h> 2#include <math.h> 3double f(double); 4 5void main(void){ 6printf("%d",c); 7} 8 9double f(double){ 10int c=1.0; 11return (); 12}

という風にしたいのですが、もちろんこれではコンパイルエラーが起きます。
main関数の外で定義されている変数の値をmain関数で呼び出すことはできないのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

直接は参照できませんが、どうしてもというならグローバル変数で受け渡しという手がなくはないと思います。関数f()のパラメータを変えずに済みますが、printfのステップに来る前にf()を実行済みである必要があります。

C

1#include <stdio.h> 2#include <math.h> 3int g_c; 4double f(double); 5 6void main(void){ 7 double hogehoge=0.0; 8 hogehoge = f(hogehoge); //printfの前に関数f()を実行する必要がある 9 printf("%d",g_c); 10} 11 12double f(double a){ 13 int c=1; 14 g_c = c; //関数f()のローカル変数をグローバル変数にセット 15 return (a); 16}

投稿2016/10/20 06:01

編集2016/10/20 06:20
k1000

総合スコア67

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

変数のスコープが違うので無理です。
main関数内でも使用したければ、
関数double f(double);を宣言してる下にでも
int c;
のようにglobal スコープで宣言すれば使えます。

補足ですが、
int c=1.0;
では型は整数、代入しているのは少数なので
int c=1;
もしくは
float c = 1.0;

double c = 1.0;
とするべきです。
また関数f内の最終行
return()
とありますが、
この関数はdouble値を返す関数なので
例えば先ほどのcを
double c=1.0;
と宣言しておいて
return c;
等double型の値をreturnするべき。

もう一点
main関数のprintfのフォーマット指定は
cがint型ならそれでよいですが、floatやdoubleならば%dではなく%fなどを仕様するべきかな

と思います。

投稿2016/10/20 05:52

hiim

総合スコア1689

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ファイル間で変数のスコープを有効にしたいってことなら、

c

1extern int c;

投稿2016/10/20 05:49

fromageblanc

総合スコア2724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

physics303

2017/09/08 01:29

ありがとうございます。ただ、ファイル間のスコープを有効にしたいわけではありません。ファイル内の異なる関数内でのスコープを有効にしたいのです。
guest

0

できません。
何をしたいかよくわかりませんが、次のようにしたいのですか?

#include <stdio.h> #include <math.h> double f(); void main(void){ double c = f(); printf("%d",c); } double f(){ double c=1.0; return c; }

投稿2016/10/20 05:44

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

physics303

2016/10/20 05:45

ちがいます。でも、できないということはわかりました。ありがとうございました。
moonphase

2016/10/20 06:03

念のため補足しておきますが - ほかの関数内で整数cが定義されています -> 関数内で定義された変数には同じファイルだろうが別ファイルだろうがアクセスできません - グローバルで定義した変数へは、同じファイルならそのまま、他のファイルならexternしてればアクセスできます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問