• ベストアンサー

staticのスコープについて

//main.c #include "myfunc.h" #include <stdio.h> static char hoge[10]; int main(void){ myfunc(hoge); printf("%c",*hoge); } ------------------ //myfunc.h void myfunc(char *hoge) { *hoge = 'a'; } 上記のようなプログラムの場合、 a と表示されると思いますが、この動作は保証されているのでしょうか? つまり、staticにて宣言したモジュール内の変数は、他モジュールにポインタを渡しても、内容は保証されるのかどうかと言う事なのですが。 よろしければ教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.2

問題ないです.コンパイラ/リンカの名前解決だけの話なので,static宣言された変数のポインタは他モジュールからも参照可能です. ただ,上記の例はあまり「他」モジュールになってないですね.たとえば, ---main.c--- #include <stdio.h> static char hoge[10]; extern void myfunc( char *ch ); int main(int argc, char **argv) { myfunc(hoge); printf("%c",*hoge); } ---myfunc.c--- void myfunc( char *hoge ) { *hoge = 'a'; } で,両ソースを個別にコンパイルしてmain.oとmyfunc.oをリンクして実行形式を作っても所望の動作が得られます.

tamanegi_majin
質問者

お礼

ありがとうございます。 そして全くです(笑)。 モジュール化で躓く事が多いので、もう一度勉強しなおす事にします。

その他の回答 (1)

noname#6581
noname#6581
回答No.1

大丈夫です。 static変数でも、ポインタで渡してしまえば他のモジュールでいじることができます。

tamanegi_majin
質問者

お礼

ありがとうございます。 助かりました。