C言語関係掲示板

過去ログ

No.366.関数の戻り値にstaticを付ける意味はあるのか?

[戻る] [ホームページ]
No.2421

関数の戻り値にstaticを付ける意味はあるのか?
投稿者---filter(2002/08/19 16:09:19)


初めて投稿致します。宜しくお願いします。

とある書籍やらHP等を拝見しておりますと
関数の戻り値にstaticを付けている関数を見かけます。

↓こんな感じ
static void func(void)
{
//なんらかの処理
}

こういう書き方は初めて見たので、驚きとともに疑問も出てきました。
みなさん、こういう書き方しているのでしょうか。
私は、今まで一度もこういう書き方をした事がありません。
する必要性も感じられません。

変数にstaticを付ける意味(効果)は理解出来るのですが、
関数にstaticを付ける意味が理解出来ません。

もしや、スコープを限定する為に付けてるのでしょうか。
(関数に付けても意味ないと思うのですが…)
それとも、ANSI C以前の書き方なのでしょうか。

それ以外に、私の知らない所でもっと深い意味があるのでしょうか。
いろいろ検索したのですが、ご存知の方御教授お願い致します。

No.2422

Re:関数の戻り値にstaticを付ける意味はあるのか?
投稿者---TDa(2002/08/19 17:14:34)


>とある書籍やらHP等を拝見しておりますと
>関数の戻り値にstaticを付けている関数を見かけます。

それは戻り値にstaticをつけているのではなく関数を修飾しています。

C言語のいやなところなのですが同じキーワードや記号が現れる場所によって
意味が変わるものがあり混乱を招きます。staticはその代表的なものです。

変数に対してstatic修飾子がついた場合。
関数の中 宣言したオブジェクトに静的な記憶クラスを与える。

関数の外でstatic指定子がついた場合。
その識別子は内部リンケージを持つ。

上記の文章はK&R2ndのリファレンスから抜粋したもので堅い書き方ですが要するに関数の外でstatic指定子がついたオブジェクトはファイルスコープを持ちファイルの外からは見えないということです。

No.2423

Re:関数の戻り値にstaticを付ける意味はあるのか?
投稿者---PSB(2002/08/19 17:17:51)


>もしや、スコープを限定する為に付けてるのでしょうか。

そうです。staticを付けると、そのファイル以外から参照できなくなります。

>(関数に付けても意味ないと思うのですが…)

そのファイル以外から参照してほしくないような関数に付けたりすることが多いですね。(C++でいうprivateメンバ関数に似たような事ができる)


No.2424

Re:関数の戻り値にstaticを付ける意味はあるのか?
投稿者---filter(2002/08/19 17:33:13)


お二方、回答ありがとうございます。
やはり、ファイルスコープを限定し、他のファイルから参照させない為に
staticで関数を修飾しているのですね。
C++でいうprivateに書いた「ような」なものという表現は非常にわかりやすかったです。
どうもありがとうございました。