- ベストアンサー
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にて宣言したモジュール内の変数は、他モジュールにポインタを渡しても、内容は保証されるのかどうかと言う事なのですが。 よろしければ教えてください。
- みんなの回答 (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をリンクして実行形式を作っても所望の動作が得られます.
その他の回答 (1)
大丈夫です。 static変数でも、ポインタで渡してしまえば他のモジュールでいじることができます。
お礼
ありがとうございます。 助かりました。
お礼
ありがとうございます。 そして全くです(笑)。 モジュール化で躓く事が多いので、もう一度勉強しなおす事にします。