トップページ

本棚


両手で1000まで数えられますか?:2進法の話
数値 - 危険物取り扱い注意
100 × 200 =32?:変数のオーバーフローの話
パリティビット
小数の扱いについて
ぽいんた
ぽいんた2
ぽいんた3
ジ・オリジン
ジ・オリジン:補足
かっこつける話
かっこつける話2
文字列のこと
タイミングの話
拡張性の話
取り込む話
staticな話

コンパイルの話1
コンパイルの話2:止まらぬビルド
コンパイルの話3:マシン語に落ちるということ1:メモリの話
コンパイルの話4:マシン語に落ちるということ2:最適化
コンパイルの話5:マシン語に落ちるということ3:変数とスタック
コンパイルの話6:コンパイラはそもそも何をやってくれるのか??
リンクの話
プリプロセッサの話

OS、というもの

オブジェクト指向1
オブジェクト指向:2
オブジェクト指向:3

オブジェクト指向:番外 C言語のソースファイルの話
オブジェクト指向:番外 C言語での「再利用性」と「カプセル化」データ構造とアルゴリズム


抽象的な話

寝込んで布団の中で考えたこと
こんなの、常識??
お仕事プログラミング
ソフトでハードなプログラム
プログラムするということ
お勉強
プログラムを学ぶということの補足
C言語:「学問」と「実務」
統合開発環境
C言語ってポータブルですか?
C言語ってポータブルですか?:2
あなたは、どう読みますか?
ああ勘違い
試してガッテン
低級品
質問をするということ
ポカ
「何もしない」 != 「無駄」
エディタの話
もっと手を抜こう

いまどきの、アセンブラ

VisualStudio2005
VisualStudio2005:2

戦争の防ぎ方、に対する私の考え
身近な差別
改革
地球に優しいなんて大嘘
統計で嘘をつく方法

言葉について
言葉について:2

神が死んだということ
善悪の彼岸から、力への意思を目覚めさせるということ

本を読むということ
本を読むということ:2

絵を描く話
地図
地球儀

オカルトのお話
がんだむさん
RPGソフトウェア
記紀神話の不思議



メニュー

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

C言語にはstaticという修飾子がある。

これって結構便利な修飾子なんだけど、つかう場面によってすこしずつ意味合いが異なるのがいやらしい気がする。

①ローカル変数の場合
これはもちろん、静的確保を意味する。関数を抜けても領域がキープされ、次回関数突入時には前回の値が残っている。
int Hoge(void)
{
  static int i;
  i++;
  return i;
}
という関数があったとすると、この関数をコールするたびにiの値はひとつずつインクリメントされることになる。
まあ、常識??

②グローバル変数の場合
この場合は上とちょっと意味合いが異なってくる。
例えば
static int g_iHoge;
と宣言したグローバル変数を参照したり変更したりできるのは同一ファイルスコープ内に限られる。

③関数の場合
例えば、
static int hoge(void)
なんていう場合。
これも、この関数をコールできるのは同一ファイルスコープ内に限られる。

①は、わりとよく使われているから詳細は割愛するとして、②と③のstaticの使い方は、適切に使えば非常に有用だと思う。

外から参照されたくない変数や関数というのはあると思うからだ。

上手く使いこなせば、C言語でもオブジェクト指向の思想に近い安全性のあるコードを書くことができる。


また、staticとは別にconstという修飾子も存在する。

これは、この修飾子をつけた変数を定数として扱う(値の変更を禁止する)ということだ。

単純な定数はほとんどの場合#defineやenumを使って定義すればいいが、テーブルとして定義するグローバルな配列などは不用意に変更されたくない場合にconstを使う。

また、関数の引数などにもconstを使用して、引数のIn/Outを明確にして、Inの引数の値を変更しないことを保障してやるのも有効だ。


これらの修飾子を有効に使いこなせば、よりセキュアなコードになると思う。
なぜか、これらの修飾子ってあんまり使われていない。結構、便利だし安全なコードが書けると思うのに。
ぜひ、有効活用しましょう。




| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
@wiki - 無料レンタルウィキサービス | プライバシーポリシー