<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>いちばんやさしいゲームの作り方 &#187; スコープ</title>
	<atom:link href="http://www.game-create.com/archives/tag/%e3%82%b9%e3%82%b3%e3%83%bc%e3%83%97/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 01:28:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>やっぱり中括弧によるブロックは誤解があるようです</title>
		<link>http://www.game-create.com/archives/1777</link>
		<comments>http://www.game-create.com/archives/1777#comments</comments>
		<pubDate>Tue, 02 Jun 2009 15:42:41 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[スコープ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1777</guid>
		<description><![CDATA[PHP などではブロックを作ってもスコープになりません。
&#60;?php
{
  $var = 123;
}
echo $var; // 123 と出る
?&#62;

コード中で突然ブロックに遭遇すると C/ [...]]]></description>
			<content:encoded><![CDATA[<p>PHP などではブロックを作ってもスコープになりません。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-brackets">{
  </span><span class="hl-var">$var</span><span class="hl-code"> = </span><span class="hl-number">123</span><span class="hl-code">;
</span><span class="hl-brackets">}
</span><span class="hl-reserved">echo </span><span class="hl-var">$var</span><span class="hl-code">; </span><span class="hl-comment">// 123 と出る
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p><span id="more-1777"></span></p>
<p>コード中で突然ブロックに遭遇すると C/C++ 経験者の方にとっては不思議に見えるようです（先日もお仕事でそんなお話しになりました）。最近では、「見やすくなるなら積極的にブロックを使おう」と書いている書籍もあるほどでして、私の場合は、「コピペするならこの範囲でやれ」という意思表示でも使っています。</p>
<p>Java とかだとどうなんでしょう？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1777/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>古い Visual C++ のスコープに関するおもしろいバグ</title>
		<link>http://www.game-create.com/archives/559</link>
		<comments>http://www.game-create.com/archives/559#comments</comments>
		<pubDate>Thu, 07 Aug 2008 01:05:12 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[コンパイラ]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[ネタ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=559</guid>
		<description><![CDATA[昔の Visual C++ というか cl.exe におもしろいバグがあるそうです。

for (int i = 0; i &#60;10; i++);

printf(&#34;%d\n&#34;, i);
これ [...]]]></description>
			<content:encoded><![CDATA[<p>昔の Visual C++ というか cl.exe におもしろいバグがあるそうです。</p>
<p><span id="more-559"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-reserved">for </span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> &lt;</span><span class="hl-number">10</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>これが動いてしまうそうです。ちゃんと 10 と表示されるとか。わざわざ for 文の中で変数を宣言する意味が無いですね。もしかしたら cl.exe ではブロックの先頭から末尾が新しいスコープになるように設計されているのかもしれません。なんというか機械的に、まぁ、機械であることには違いないんですけど。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/559/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>新しい名前空間を作る</title>
		<link>http://www.game-create.com/archives/553</link>
		<comments>http://www.game-create.com/archives/553#comments</comments>
		<pubDate>Wed, 06 Aug 2008 01:51:15 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[名前空間]]></category>
		<category><![CDATA[言語仕様]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=553</guid>
		<description><![CDATA[新しい名前空間を作るためには namespace 文を使います。

namespace 文に続けてコードを書くことによって、ブロックの中で定義した関数やクラスや変数がその名前空間に属するようになります。関数やクラスや変数 [...]]]></description>
			<content:encoded><![CDATA[<p>新しい名前空間を作るためには namespace 文を使います。</p>
<p><span id="more-553"></span></p>
<p>namespace 文に続けてコードを書くことによって、ブロックの中で定義した関数やクラスや変数がその名前空間に属するようになります。関数やクラスや変数を独自の名前空間に属させることによってシンボルの衝突を減らすことができるようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">namespace </span><span class="hl-identifier">sample
</span><span class="hl-brackets">{
  </span><span class="hl-types">void </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()
  {
  }

  </span><span class="hl-types">class </span><span class="hl-identifier">SomeClass</span><span class="hl-brackets">()
  {
  }

  </span><span class="hl-types">int </span><span class="hl-identifier">someValue</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>名前空間の中にあるオブジェクトにアクセスしたい場合は、名前空間の名前とシンボルをふたつのコロンで区切って次のように書きます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-identifier">sample</span><span class="hl-default">::</span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-identifier">sample</span><span class="hl-default">::</span><span class="hl-identifier">SomeClass</span><span class="hl-default"> *</span><span class="hl-identifier">instance</span><span class="hl-default"> = </span><span class="hl-reserved">new </span><span class="hl-identifier">sample</span><span class="hl-default">::</span><span class="hl-identifier">SomeClass</span><span class="hl-brackets">()</span><span class="hl-default">;
</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">cout</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">sample</span><span class="hl-default">::</span><span class="hl-identifier">someValue</span><span class="hl-default"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-default">::</span><span class="hl-identifier">endl</span><span class="hl-default">;</span></pre></div></div>
<p>名前空間のシンボルをインポートしたい場合は using namespace 文を使います。 using namespace 文に続けて名前空間の名前を書くと、そのブロックの中だけ名前空間を省略することができるようになります。ただ、あまり広いブロックで using namespace を使うと、名前空間の意味が薄れてしまうため注意が必要です。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-brackets">{
  </span><span class="hl-reserved">using </span><span class="hl-types">namespace </span><span class="hl-identifier">sample</span><span class="hl-code">;
  </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()</span><span class="hl-default">; </span><span class="hl-comment">// エラー！このスコープに using namespace がない
</span><span class="hl-identifier">sample</span><span class="hl-default">::</span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()</span><span class="hl-default">; </span><span class="hl-comment">// OK</span></pre></div></div>
<p>なお、名前空間はネストすることができます。シンボルを階層構造にしたい場合に便利です。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">namespace </span><span class="hl-identifier">com
</span><span class="hl-brackets">{
  </span><span class="hl-types">namespace </span><span class="hl-identifier">game_create
  </span><span class="hl-brackets">{
    </span><span class="hl-types">void </span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()</span><span class="hl-code">;
  </span><span class="hl-brackets">}
}

</span><span class="hl-identifier">com</span><span class="hl-default">::</span><span class="hl-identifier">game_create</span><span class="hl-default">::</span><span class="hl-identifier">someFunc</span><span class="hl-brackets">()</span><span class="hl-default">;</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/553/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>名前空間付きの標準ライブラリを使う</title>
		<link>http://www.game-create.com/archives/428</link>
		<comments>http://www.game-create.com/archives/428#comments</comments>
		<pubDate>Tue, 15 Jul 2008 12:48:24 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[名前空間]]></category>
		<category><![CDATA[言語仕様]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=428</guid>
		<description><![CDATA[名前空間付きの標準ライブラリを使うためには、次のようにヘッダをインクルードします。


Ｃ言語の標準ライブラリの場合は、先頭に c をつけ、拡張子の *.h を省いた名前でインクルードする
C++ の標準ライブラリの場合 [...]]]></description>
			<content:encoded><![CDATA[<p>名前空間付きの標準ライブラリを使うためには、次のようにヘッダをインクルードします。</p>
<p><span id="more-428"></span></p>
<ul>
<li>Ｃ言語の標準ライブラリの場合は、先頭に c をつけ、拡張子の *.h を省いた名前でインクルードする</li>
<li>C++ の標準ライブラリの場合は、拡張子の *.h を省いた名前でインクルードする</li>
</ul>
<p>たとえば名前空間付きの stdio.h と iostream.h をインクルードする場合は次のようにします。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">cstdio</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">iostream</span><span class="hl-quotes">&gt;</span></pre></div></div>
<p>このようにしてインクルードした関数やクラスは std という名前空間を伴ってアクセスすることができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">cstdio</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">iostream</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

</span><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])
{
  </span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">てすとん</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;

  </span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">cout</span><span class="hl-code"> &lt;&lt;</span><span class="hl-quotes">&quot;</span><span class="hl-string">てすとん</span><span class="hl-quotes">&quot;</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">endl</span><span class="hl-code">;

  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>なお、 using namespace を使うことで、そのスコープに限り名前空間を省略することができるようになります。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">cstdio</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">
#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">iostream</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

</span><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])
{
  {
    </span><span class="hl-reserved">using </span><span class="hl-types">namespace </span><span class="hl-identifier">std</span><span class="hl-code">;
    </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">てすとん</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-comment">// OK
  </span><span class="hl-brackets">}

  </span><span class="hl-identifier">cout</span><span class="hl-code"> &lt;&lt;</span><span class="hl-quotes">&quot;</span><span class="hl-string">てすとん</span><span class="hl-quotes">&quot;</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">endl</span><span class="hl-code">; </span><span class="hl-comment">// エラー！このスコープに using namespace が無い

  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>これらはもちろん、シンボルが衝突しないための仕組みなのですが、私は現在までに標準関数と名前がぶつかったことは JavaScript を使っていたときの１度しかありません。恵まれているのかも。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/428/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>新しいローカルスコープを作る</title>
		<link>http://www.game-create.com/archives/427</link>
		<comments>http://www.game-create.com/archives/427#comments</comments>
		<pubDate>Mon, 14 Jul 2008 12:21:00 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[言語仕様]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=427</guid>
		<description><![CDATA[新しいローカルスコープを作るためには、中括弧によるブロックを使います。

C/C++ において中括弧 {} でくくられたブロックは新しいローカルスコープとなります。たとえば次のソースコードを見てください。
#includ [...]]]></description>
			<content:encoded><![CDATA[<p>新しいローカルスコープを作るためには、中括弧によるブロックを使います。</p>
<p><span id="more-427"></span></p>
<p>C/C++ において中括弧 {} でくくられたブロックは新しいローカルスコープとなります。たとえば次のソースコードを見てください。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">iostream</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

</span><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])
{
  </span><span class="hl-types">int </span><span class="hl-identifier">value</span><span class="hl-code"> = </span><span class="hl-number">10</span><span class="hl-code">;

  </span><span class="hl-brackets">{
    </span><span class="hl-types">int </span><span class="hl-identifier">value</span><span class="hl-code"> = </span><span class="hl-number">100</span><span class="hl-code">;

    </span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">cout</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">value</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">endl</span><span class="hl-code">; </span><span class="hl-comment">// 100
  </span><span class="hl-brackets">}

  </span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">cout</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">value</span><span class="hl-code"> &lt;&lt;</span><span class="hl-identifier">std</span><span class="hl-code">::</span><span class="hl-identifier">endl</span><span class="hl-code">; </span><span class="hl-comment">// 10

  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>２カ所で value という同じ名前を持つ変数の内容を表示していますが、１回目は 100 、２回目は 10 と表示されます。１回目は直前で 100 に初期化しているため、何ら不自然なことはないのですが、同じ変数名でも２回目は 10 となっています。これは中括弧でくくられたブロックが局所的なスコープを持っているためです。関数の中で作ったローカル変数は関数の外から参照できないのと同様に、スコープ内で宣言した変数はスコープの外からは参照できなくなります。</p>
<p>むやみに多様するのは良くないと思いますが、これをうまく利用すると変数名の衝突が少なくなります。たとえば results や status などのように汎用的な意味の変数名を、シンボル重複を心配せずに使うことができるようになります。また、副作用としてリファクタリングがしやすくなります（ロジックの依存関係がわかりやすくなるため）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/427/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>typedef にもスコープがあるらしい</title>
		<link>http://www.game-create.com/archives/406</link>
		<comments>http://www.game-create.com/archives/406#comments</comments>
		<pubDate>Thu, 26 Jun 2008 13:22:30 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[typedef]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[データ型]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=406</guid>
		<description><![CDATA[STL のサンプルソースを眺めていると嵐のような typedef に目に留まるのですが、どうやらスコープがあるらしいですね。だから安心して使っているというわけですね。

int main(int argc, char * [...]]]></description>
			<content:encoded><![CDATA[<p>STL のサンプルソースを眺めていると嵐のような typedef に目に留まるのですが、どうやらスコープがあるらしいですね。だから安心して使っているというわけですね。</p>
<p><span id="more-406"></span></p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])
{
  {
    </span><span class="hl-types">typedef int </span><span class="hl-identifier">numeric</span><span class="hl-code">;
    </span><span class="hl-identifier">numeric number</span><span class="hl-code">; </span><span class="hl-comment">// OK
  </span><span class="hl-brackets">}

  </span><span class="hl-identifier">numeric number</span><span class="hl-code">; </span><span class="hl-comment">// エラー！

  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>名前空間とブロックを駆使すれば名前の衝突に気を使わなくても済みそうですね。</p>
<p>ちなみに typedef って前方宣言できるんですよね。リスト構造を作る時に便利です。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">iostream</span><span class="hl-quotes">&gt;</span><span class="hl-prepro">

</span><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTask Task</span><span class="hl-default">, *</span><span class="hl-identifier">Task</span><span class="hl-default">;

</span><span class="hl-types">typedef struct </span><span class="hl-identifier">tagTask </span><span class="hl-brackets">{
  </span><span class="hl-identifier">Task</span><span class="hl-code"> *</span><span class="hl-identifier">previous</span><span class="hl-code">;               </span><span class="hl-comment">// 本来は struct tagTask * と
  </span><span class="hl-identifier">Task</span><span class="hl-code"> *</span><span class="hl-identifier">next</span><span class="hl-code">;                   </span><span class="hl-comment">// 書かなければならない
</span><span class="hl-brackets">} </span><span class="hl-identifier">Task</span><span class="hl-default">, *</span><span class="hl-identifier">Task</span><span class="hl-default">;

</span><span class="hl-types">int </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])
{
  </span><span class="hl-identifier">Task player</span><span class="hl-code">;

  </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>でも、 STL 使うようになってからリストを作らなくなりました。メルマガではまだ初歩の段階なので配列で頑張っていますし…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/406/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>グローバルスコープ演算子</title>
		<link>http://www.game-create.com/archives/182</link>
		<comments>http://www.game-create.com/archives/182#comments</comments>
		<pubDate>Tue, 11 Dec 2007 12:04:12 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[スコープ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=182</guid>
		<description><![CDATA[私のサンプルソースはグローバルスコープ演算子がたくさんついています。
最初はインスタンスハンドルをグローバル変数に待避させる時、名前が同じになってしまったのでつけはじめたのですが、多すぎると気持ち悪いですし、すでにグロー [...]]]></description>
			<content:encoded><![CDATA[<p>私のサンプルソースはグローバルスコープ演算子がたくさんついています。</p>
<p>最初はインスタンスハンドルをグローバル変数に待避させる時、名前が同じになってしまったのでつけはじめたのですが、多すぎると気持ち悪いですし、すでにグローバル空間はいろんなシンボルで汚れているので取ることにしました。</p>
<p><span id="more-182"></span></p>
<p>しかし、取ってしまうとインスタンスハンドルの変数名が同じになってしまいますよね。どうやって対処するのかと言えば、そこは Windows プログラミング。ハンガリー記法に則って変数の頭にグローバルを意味する g_ を付加します。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">HINSTANCE g_hInstance</span><span class="hl-default">;</span></pre></div></div>
<p>やはり Windows ではハンガリー記法のしがらみから抜け出せません。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/182/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>変数</title>
		<link>http://www.game-create.com/archives/60</link>
		<comments>http://www.game-create.com/archives/60#comments</comments>
		<pubDate>Mon, 03 Sep 2007 00:02:34 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[スコープ]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[用語]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=60</guid>
		<description><![CDATA[変数とは計算や記憶のために確保したメモリ領域を名前で管理する仕組みです。
代数学と同様にデータを記憶することを代入すると呼びます。

変数には名前、型、スコープという要素があります。

名前
計算、記憶に際して名前から対 [...]]]></description>
			<content:encoded><![CDATA[<p>変数とは計算や記憶のために確保したメモリ領域を名前で管理する仕組みです。</p>
<p>代数学と同様にデータを記憶することを代入すると呼びます。</p>
<p><span id="more-60"></span></p>
<p>変数には名前、型、スコープという要素があります。</p>
<ul>
<li><strong>名前</strong><br />
計算、記憶に際して名前から対象データを特定するための文字列。</li>
<li><strong>型</strong><br />
その変数が表現できるデータ形式を定めたもの。</li>
<li><strong>スコープ</strong><br />
その変数を使用できる範囲。</li>
</ul>
<p>変数は一般的に次のような書式で宣言します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">variable</span><span class="hl-default"> = </span><span class="hl-number">100</span><span class="hl-default">;
</span><span class="hl-comment">// int      -&gt; 変数の型
// variable -&gt; 変数名
// 100      -&gt; 初期値</span></pre></div></div>
<p>イコール記号（ = ）を使用して変数の中身の値を書き換えることができます。このとき = の左（左辺）に書き換えたい変数の名前を書き、右（右辺）に書き換えたい内容を記述します。逆は誤りです。</p>
<p>例） 年齢 age に 26 を代入（記憶）する。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">age</span><span class="hl-default"> = </span><span class="hl-number">26</span><span class="hl-default">;</span></pre></div></div>
<p>右辺は計算結果を書くこともできます。</p>
<p>例） 単価 1,000 円の商品を３個買った場合の総額 total を計算して代入（記憶）する。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-identifier">total</span><span class="hl-default"> = </span><span class="hl-number">1000</span><span class="hl-default"> * </span><span class="hl-number">3</span><span class="hl-default">;</span></pre></div></div>
<p>関数の外に宣言した変数はファイル内のどこからでも参照できるグローバル変数。 {} の中で宣言した変数は {} 内でのみ使用可能なローカル変数となります。</p>
<p>例） 変数のスコープ。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">total</span><span class="hl-default"> = </span><span class="hl-number">0</span><span class="hl-default">; </span><span class="hl-comment">// このファイル内のどこからでも使用可能

</span><span class="hl-identifier">function calc</span><span class="hl-brackets">()
{
  </span><span class="hl-comment">// {} の中で宣言した変数は {} の中でのみ使用可能</span><span class="hl-code">
　</span><span class="hl-types">int </span><span class="hl-identifier">price</span><span class="hl-code"> = </span><span class="hl-number">1000</span><span class="hl-code">； </span><span class="hl-comment">// {} の中でのみ使用可能</span><span class="hl-code">
　</span><span class="hl-types">int </span><span class="hl-identifier">amount</span><span class="hl-code"> = </span><span class="hl-number">3</span><span class="hl-code">;    </span><span class="hl-comment">// {} の中でのみ使用可能

  // ｛｝ の中でのみ使える変数 price, amount を
  // どこからでも使える変数 total に代入（記憶）する
  </span><span class="hl-identifier">total</span><span class="hl-code"> = </span><span class="hl-identifier">price</span><span class="hl-code"> * </span><span class="hl-identifier">amount</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-comment">// total は {} の外で宣言されているため使用可能
</span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">total is %d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-identifier">total</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>このとき total のようにファイル内のどこからでも使用できる変数をグローバル変数、 price や amount のように {} の中でしか使用できない変数をローカル変数と呼びます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/60/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
