グローバル変数について議論するスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGこういうときはグローバル変数以外に解決法があるのか!
などうぞうぞしゃべくるスレ
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNGソレトモマジデワカランノ?
0004デフォルトの名無しさん
NGNGだから寝ろ
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGなにが?
グローバル変数の良し悪し?
0007デフォルトの名無しさん
NGNG| ̄ ̄( ゚Д゚) ̄ ̄| < 寝る!
|\⌒⌒⌒⌒⌒⌒\ \
| \ \  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\ |⌒⌒⌒⌒⌒⌒|
\ |_______|
0008デフォルトの名無しさん
NGNG永久におやすみ
0009デフォルトの名無しさん
NGNG以上。
0010デフォルトの名無しさん
NGNGハァ?
0011デフォルトの名無しさん
NGNGC言語の範囲内で答えてくれ!
できるというやつは方法を言ってくれ!
言わないやつはできないやつだ(=言いたくないというのはできないと言っている)!
0012デフォルトの名無しさん
NGNG関数内の静的ローカル変数でやれ。
0014デフォルトの名無しさん
NGNGstatic int instance;
return &instance;
}
0016デフォルトの名無しさん
NGNGこれはグローバル変数の好例では?
0017デフォルトの名無しさん
NGNG最初はすべて公開
衝突したらprefix付けそれで駄目なら初めてstaticにしろ
0018デフォルトの名無しさん
NGNGみれ
0019デフォルトの名無しさん
NGNG北京原人?
それとも秩父?
0020デフォルトの名無しさん
NGNG便利かも。最終的には全部消すし、そのために関数の引数を全部直すのとかめんどいし。
0021デフォルトの名無しさん
NGNGハァ?
必要ないかもしれない部分に最初からコストかけてどうすんだよ。
必要になってからやるのがプロの業だ。
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGハァ?
なんでローカル変数にするとコストとかかるんだよ?
最初っからあるべき場所に置けばいいじゃんか。
ローカルでいいものを何でわざわざグローバルにするのか?
小規模のものを一人でしか作ったこと無いんだろ。 やれやれ。
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNGローカル変数。
グローバルはよっぽどのことがあるときかオヴァカしか使わない。
0026デフォルトの名無しさん
NGNGほぼ全てローカル変数だろ?
グローバル変数は しかたがなく 使うものだよ。
最近の言語とまともなプログラミングの知識があればグローバル変数なんて
一切使わなくても大丈夫だけどね。
((特定条件下での)パフォーマンス以外の理由でグローバル変数を使う理由が見つからない)
>>9
Singleton の概念やね。
でも最近の言語なら名前空間に守られてるし。
0027デフォルトの名無しさん
NGNGスクロールしたりしたりしないといけないので嫌いだ。
管理コストかかるぶん
グローバル変数のほうが効率悪い
>>24
マトモなプロジェクトならグローバル変数は極力使うなって
標準機約にあるはず。
002827
NGNG0029デフォルトの名無しさん
NGNGみれ
0030デフォルトの名無しさん
NGNGclass g_{
public:
static void setSexFriend(string s) { SexFriend = s; }
private:
static string SexFriend;
};
// main.cpp
static string g_::SexFriend;
void hoge(){
g_::SexFriend("綾子11歳")
}
0031デフォルトの名無しさん
NGNGhttp://ftp.sk-kaken.co.jp/compile_error-01.wav
女子高生プログラマ つきねこ15歳「コンパイルエラー、です」
0032デフォルトの名無しさん
NGNG>>11
インターフェースはそのままか ? だったら、難しいな。(でも、ファイル
スコープにはしろよ。) 単に同じ機能が必要と言うだけなら、シード (+ 管理)
領域を呼び出し側で取ってもらって、引数でポインタ渡しすればいいだけ。
でも、ネストが深い関数中で呼び出すことを考えると面倒だよね。
だから、グローバル変数で作ってるわけだよ。わかった ?
逆にいうとグローバル変数のメリットって (引数渡しをサボることによって得ら
れるわずかな性能向上と) "これ" ぐらいだよ。
>>16
好例 ? マジですか ?
>>17
突っ込む気もおきんわ。放置しとこ。
>>26
> Singleton の概念やね。
なんか、勘違いしてるような...。
>>27
> グローバル変数はエディタを分割表示したり...
なんで、作成時しか気にしない ? グローバル変数のデメリットってデバッグ時や
保守の時に一番感じると思うが...。サンデープログラマですか ?
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG結婚するならグロ―バル変数
0035デフォルトの名無しさん
NGNG一度でもフルアセンブルで、しっかりプログラム書いてみれば、
グローバル変数と構造体の使い道がはっきり見えるってもんだろ。
共用体を使いこなす、これ最強。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNGint MailFriendCount;
};
g::MailFriendCount = rand();
0038デフォルトの名無しさん
NGNG普通逆じゃないか?
グローバル変数は浮気しまくりの美人だぞ?
00399
NGNG0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGそれを言うなら局所変数は一回ヤって終わりじゃねーかYo!
0042デフォルトの名無しさん
NGNGきちんとロックした気になってるソース見たことあるよ。
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG言ってみたいだけちゃうんかと…
0048デフォルトの名無しさん
NGNGグローバル変数をむやみに使うやつはグローバル変数の危険性を知らないだけ。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNGグローバルならstaticつけてスコープをファイル内にするんだろうけど
コボラーの人は使う変数全部1箇所に集めたがる人もいるかもしれませんね
0053デフォルトの名無しさん
NGNGグローバルじゃないとつらいな・・・
0054デフォルトの名無しさん
NGNG確かにグローバル変数の使い方は微妙かも知れないが、その前に
プログラマはC言語を正しく理解しているのかと50時間問い詰めたい。
0056デフォルトの名無しさん
NGNG増えてくるのさ。
静的に見ると、必要なグローバル変数が見えてくるし、
ドキュメント等の管理もしやすくなると思う。
特に、組み込みメインのうちの会社では、動作のシーケンス
ばかりを考えて、訳わからんグローバル変数だらけで、
嫌になってくるよ。
0058デフォルトの名無しさん
NGNG理解できないなら、帰っていいぞ。
0059デフォルトの名無しさん
NGNG大きなテーブルを共有メモリに置いてどうすんだよ。その考えがバグを生む。
性^H静的変数(static)と広域変数をいっしょくたにするなよ。
まとめると、お前は変数がどこに格納されてるか考えた事はあるか?
細かい事は、お母さんに聞け。
0060デフォルトの名無しさん
NGNG// 関数は↓以外禁止の方向でお願いします!!
void func ( void ) ;
006252
NGNG>>性^H静的変数(static)と広域変数をいっしょくたにするなよ。
ファイルスコープはグローバルスコープではないと言いたいのならそうですね
関数外で宣言した奴はstaticつけてても癖でグローバルと呼んじゃう。
(でグローバルが話題になってるとファイルスコープもグローバルの仲間にいれちゃう)
日本語と感覚がおかしくてすまん
0063デフォルトの名無しさん
NGNG共有メモリってのは言い換える所のシステムメモリであって、見えない
ボトルネックの原因になりやすいんだよな。システムに常駐するような
ソフトウェアでも書かない限りは、出来るだけ使用を割けるべき。
ましてテーブルみたいに巨大かつ不変なデータは絶対置くべきでないよ。
globalとstaticの違いってのは、確かに表向きにはスコープの違いに
見えるが、実際はプログラムの起動時に、あらかじめ領域が確保された
global変数と、宣言されてメモリを割り当てられた後、開放される事のない
static変数ってゆう違いがあるんだよ。メモリを大量に積んだPC環境では
問題に気づかないかも知れないが、メモリリークの原因に成り得る、
言わば誤用=バグ。
オチがなくてスマソ
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG↓のようなことを言っているのか?
void func()
{
static int* buffer;
if(buffer){
buffer = new int[10000];
}
}
グローバル変数やクラスメンバ変数でも同じだが。
static int static_buffer[10000];
static int *global_buffer
0066デフォルトの名無しさん
NGNG使い方次第だとは思うが。
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGどうなの?staticはヒープに取られるの?スタックに取られるの?
それとも元から確保する領域(名前忘れた)に取られるの?
根拠となる文献やサイトを提示して教えてください。
C使えるけど、システムなんか組んだことないんだよね。ゲーム屋だったから。
006966
NGNG解決した事が何度かあったよ。理屈はワカラン。。。
俺の知ってる浅い知識だと、性的、広域変数はスタックでもヒープでもない
固定領域、使い捨て変数(自動変数)はスタック、mallocとかで動的確保/ポア
されるのはヒープってのが普通だったような。
50時間過ぎてるな。
007052
NGNGこういうのも気をつけたほうがいいの?
例
static hoge_t hogege;
void put_hoge(int hoge){ hogege.hoge = hoge; return;}
int get_hoge(){return hogege.hoge;}
・・・
007252
NGNGexternできる領域については最初に大きさがわかってるからその大きさで
プログラム起動時に割り付けられる
staticつける静的領域ってのは外部だろうが内部だろうが コンパイラが
あらかじめmax値決めてて初期化されるときに割り付けられる。
のでスタックオーバーフローと同じ理屈でメモリが割当てられなくなる
ことがあるって理解でよいですか?
0073デフォルトの名無しさん
NGNG言うなら、ヒープオーバーフローってことか?
ホントか?ガセか?
ホントに良くわかってるヤツ出て来いщ(゜ロ゜щ)
0074デフォルトの名無しさん
NGNG// ほとんど実行ファイルに含まれない
// 実行時にOSなどで作成
static int num=100; // 初期化storage
// ほとんど実行ファイルに含まれる
// 実行時にたんにロードされる
static Class xx; // Cライブラリでmain前にコンストラクタが走る
// デストラクタはmain後。exitとかしると
// 実装によってはデストラクタ呼ばれず。
// 実装によってはatexitの様にして
// デストラクタが処理される
Class& Instance(){
static Class xx; // はじめてInstanceが呼ばれるときに
// コンストラクタがはしる
// デストラクタはmain後...以下同
return xx;
}
0075デフォルトの名無しさん
NGNGつまり、メモリリーク(リソースリークが適切か?)は、
「static」「デストラクタ」「exit」の組み合わせで、
実装依存で起きるってことか。
発生確率が微妙なのがいやらしいな。
exitしなきゃいいんだろうけど。
0076デフォルトの名無しさん
NGNGデストラクタ呼ばれる順番もいいかげんだし、
そのデストラクタ内で例外おきたら結局unexpectedだし。
0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNGvoid func(void)
で、グローバルだらけになってしまったよ。
鬱。。。
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGじゃあ定数はあまり使えませんね。
0081デフォルトの名無しさん
NGNGチンカスな OS は嫌だな…
0082haruka
NGNGstaticでもグローバルでもメモリ的にはほぼ同じ扱いだよ。
どっちかがメモリリークの原因になるとかそんなのは迷信としか思えないよ。
0083デフォルトの名無しさん
NGNG言語に罪はない。
適材適所ができない奴が逝ってよし。
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGまじかよ!
もうauto変数の使用はやめよう・・・
008685
NGNGローカル変数の使用はやめよう。
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG高速なプログラムを書く為にはグローバル変数を使いましょう。
変数名の明確なルール、排他処理ができていれば弊害はまず起こりません。
0089デフォルトの名無しさん
NGNGやり方を教えてください。
使用言語は N88-BASIC を使っています。
009089
NGNG先輩から変数は1文字にしろ!
最初に全部宣言しろ!
文字型は固定サイズで確保して再利用しろ!
と教わりますた。
0091デフォルトの名無しさん
NGNG話にならん(w
0092デフォルトの名無しさん
NGNG0093マジレスしてやれ
NGNGN88-BASICでは言語仕様でローカル変数がサポートされていないので
名前付け規約・コーディング規約で対処したことがあります。
具体的には、変数名をサブルーチン名_変数名って感じにして
サブルーチン外からは直接アクセスしてはならないと決めました。
ちなみに、戻り値・引数はサブルーチン名_IN_引数名や
サブルーチン名_RETのように行いました。
0094デフォルトの名無しさん
NGNGその先輩って食べさんだったりして。
0095デフォルトの名無しさん
NGNGconst int giko;
のスコープが、そのファイルのみになるのが納得できません。
0096デフォルトの名無しさん
NGNG基本的にCの文法がわかっていないだけ。
教えて君スレにいけ。
0097デフォルトの名無しさん
NGNGなりません。
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNG間違ってはいないと思うぞ。
ただ、実際に効果が出るかどうかは別。
0100デフォルトの名無しさん
NGNG多分宿題だろ?
int a()
{
printf("%d",giko);
}
gikoがどこでどのように変更されるのか。
それを解析するのって地獄よ?正直。
0101デフォルトの名無しさん
NGNG0102デフォルトの名無しさん
NGNGその文法が納得できないという意味かと思われ
>>95
グローバル変数の参照はオブジェクトがリンクされる時に解決される。
このときリンカーは、グローバル変数が静的にアクセスされるかどうか
判断しようがない。
だから、静的変数のスコープはローカルファイルのみになったと思われ。
0103デフォルトの名無しさん
NGNGグローバル変数、関数への参照はextern宣言されていなければ
実態が同一ファイルにあるものとコンパイラがみなすのでその時点で
エラーとなる。
0104デフォルトの名無しさん
NGNGstaticなローカル変数が一番。
0105デフォルトの名無しさん
NGNGそうか?
0106デフォルトの名無しさん
NGNGそうすりゃグローバル変数の使い方がわかる。
0107デフォルトの名無しさん
NGNGグローバル変数がテンコ盛になってしまつた。
0108デフォルトの名無しさん
NGNGstatic const double sin_theta = sin(THETA); // THETAは定数
static const double k = 1.0 / sin_theta * sin_theta;
みたいなのは良くないんでしょうか。
Cだとエラーが出ましたがC++だと通りましたし、
計算結果も一致しています。
■ このスレッドは過去ログ倉庫に格納されています