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

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

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

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

Q&A

解決済

4回答

682閲覧

staticの使い方

h_proc

総合スコア68

C

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

0グッド

0クリップ

投稿2018/11/23 09:19

自分で関数を作り、そこで定義した変数をスコープの外で使えるようにstataicを使用したのですが、main関数で定義した変数を使うと、定義されていないとエラーが表示されてしまいます。(エラーが表示されるのは、16行目にあるanです。)自作関数で定義した文字をmain関数で使う方法を教えてください。

int fibo_r(void) { int a1, a2 = 1; static int an = 0; int i = 0; int n = 0; int a[2] = { 1,1 }; for (i = 2; i <= n; i++) { an = a[n - 1] + a[n]; } } int main(void) { printf("Calucurate fibonatch!\n"); printf("the answer is %d\n",an); return 0; }

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

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

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

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

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

guest

回答4

0

変数をスコープの外で使えるよう・・・にはなりません。

以下参照
C言語のstatic指定子について

投稿2018/11/23 10:48

編集2018/11/23 10:52
cateye

総合スコア6851

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

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

h_proc

2018/11/23 11:33

回答ありがとうございます。
cateye

2018/11/23 11:37

記憶クラスについてはちょっとむずいwところが有ります。書く場所によって意味(機能?)が違ったりしますから気をつけましょう。
guest

0

そこで定義した変数をスコープの外で使えるよう

関数の外側で定義しましょう。(グローバル変数)
その場合、static 宣言は不要。

投稿2018/11/23 11:06

pepperleaf

総合スコア6383

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

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

h_proc

2018/11/23 11:34

グローバル変数を定義してから、関数を作るということでしょうか。
pepperleaf

2018/11/23 11:39

そうです。 グローバル変数の弊害は色々と指摘されていますが、どっからでも参照(変更)できるのが利点。(なので、乱用され易いですが)
h_proc

2018/11/23 12:03

ありがとうございます。
guest

0

もう少し情報が欲しいです。これは何をしたいと思って書いたコードでしょうか?

上の方がご指摘しているように、fibo_rが実行されていないので現時点ではanそのものが生成されていません。また、fib_rは返り値にintが指定されていますが、コードでは何も返していません。これはエラーが出ないので、main関数と同じノリでintで書いたのか、それともint型の値を返すことを考えているのでしょうか?

投稿2018/11/23 10:05

Yhaya

総合スコア439

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

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

h_proc

2018/11/23 11:33

回答ありがとうございます。関数も定義されておらず、よく見返すと、コードも不足しているところが多かったため、もう一度作り直してから、再度質問させていただきたいと思います。
guest

0

ベストアンサー

普通に返り値として返してはダメなんです?

C

1int fibo_r(void) 2{ 3 ... 4 5 return an; 6}

しかもfibo_rは定義されただけで実行されていないですね。

投稿2018/11/23 09:25

LouiS0616

総合スコア35660

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

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

h_proc

2018/11/23 11:31

回答ありがとうございます。確かに、関数が呼び出されていませんでした。もう一度作り直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問