<?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/%e5%ae%9a%e6%95%b0/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>#define と const 、どっちで解説するか</title>
		<link>http://www.game-create.com/archives/2127</link>
		<comments>http://www.game-create.com/archives/2127#comments</comments>
		<pubDate>Sun, 30 Aug 2009 14:45:27 +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=2127</guid>
		<description><![CDATA[書籍で解説する技術について悩んでおるところでございます。

C++ の作法みたいな本を読むと「定数は const で作ろう」ってのがあるのですが、作っているサンプルコードでは #define を使っています。既存のコード [...]]]></description>
			<content:encoded><![CDATA[<p>書籍で解説する技術について悩んでおるところでございます。</p>
<p><span id="more-2127"></span></p>
<p>C++ の作法みたいな本を読むと「定数は const で作ろう」ってのがあるのですが、作っているサンプルコードでは #define を使っています。既存のコードを読むのに役立つかなぁ、という予想なのですが、こういうのをうまい具合に咀嚼してもらうための味付けがわかりません。</p>
<p>自分の座右の銘が温故知新なので、それを無理に押しつけてしまっていないかとか不安になります。メルマガでもそうだったし、良いかな…とは思うのですが。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/2127/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ヘッダファイルの役割</title>
		<link>http://www.game-create.com/archives/399</link>
		<comments>http://www.game-create.com/archives/399#comments</comments>
		<pubDate>Fri, 20 Jun 2008 12:26:27 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[ヘッダファイル]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[構造体]]></category>
		<category><![CDATA[言語仕様]]></category>
		<category><![CDATA[関数]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=399</guid>
		<description><![CDATA[ヘッダファイルは、ある *.cpp が持っている関数や型を、他のファイルから使えるようにするために *.cpp の概要を外部へ公開する名刺のようなファイルです。
ヘッダファイルは *.cpp ファイルに対してひとつ *. [...]]]></description>
			<content:encoded><![CDATA[<p>ヘッダファイルは、ある *.cpp が持っている関数や型を、他のファイルから使えるようにするために *.cpp の概要を外部へ公開する名刺のようなファイルです。</p>
<p>ヘッダファイルは *.cpp ファイルに対してひとつ *.h という形で作りますが、その内容として次のような情報を記述します。</p>
<ul>
<li>その *.cpp が外部に対してどんな型を提供しているか？</li>
<li>その *.cpp が外部に対してどんな関数を提供しているか？</li>
<li>#include ガード</li>
</ul>
<p><span id="more-399"></span></p>
<h4>その *.cpp が外部に対してどんな型を提供しているか？</h4>
<p>*.cpp が外部に公開している型を他のファイルに教えるための記述です。 class や typedef や enum などを書くことができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 構造体の定義
</span><span class="hl-types">typedef struct </span><span class="hl-brackets">{
  </span><span class="hl-comment">// …
</span><span class="hl-brackets">} </span><span class="hl-identifier">SampleStructure</span><span class="hl-default">;

</span><span class="hl-comment">// クラスの定義
</span><span class="hl-types">class </span><span class="hl-identifier">SampleClass
</span><span class="hl-brackets">{
  </span><span class="hl-comment">// …
</span><span class="hl-brackets">}

</span><span class="hl-comment">// 列挙型の定義
</span><span class="hl-types">typedef enum </span><span class="hl-brackets">{
  </span><span class="hl-comment">// …
</span><span class="hl-brackets">} </span><span class="hl-identifier">SampleEnum</span><span class="hl-default">;</span></pre></div></div>
<h4>その *.cpp が外部に対してどんな関数を提供しているか？</h4>
<p>*.cpp が外部に公開している関数を他のファイルに教えるための記述です。他のファイルからはこの *.h ファイルを #include することで *.cpp が提供している関数を使うことができるようになります。関数を外部に公開するためには、関数の名前・引数・戻り値を次のように記述します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">void </span><span class="hl-identifier">InitializePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">FinalizePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdatePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawPlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<h4>#include ガード</h4>
<p>同じ *.h ファイルを２回以上 #include してしまうと「同じ関数名が使われています」というようなエラーになってしまいます。これを回避するために #include ガードを記述します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">

</span><span class="hl-comment">// ここにヘッダファイルの中身を書きます

</span><span class="hl-prepro">#endif</span></pre></div></div>
<p>#include ガードは任意の文字列（前述の例では SAMPLE_HEADER_INCLUDED__ ）を用いて、「その文字列が初めて使われるか？」「すでに使われていないか？」を検証し、初めて使われている場合は *.h ファイルをインクルードし、すでに使われている場合は #include をスキップするようにします。これによって同じ *.h ファイルが２回以上 #include されないようになります。任意の文字列（前述の例では SAMPLE_HEADER_INCLUDED__ ）は好きな文字列を指定することができますが、ファイルごとに違う文字列を指定する必要があります。また、アンダーバーで始まる名前は使用できません。</p>
<h4>完全なヘッダファイルの例</h4>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-prepro">#ifndef </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">
#define </span><span class="hl-identifier">SAMPLE_HEADER_INCLUDED__</span><span class="hl-prepro">

</span><span class="hl-comment">// 型を定義する例
</span><span class="hl-types">typedef struct </span><span class="hl-brackets">{
  </span><span class="hl-types">int </span><span class="hl-identifier">x</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">y</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">width</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">height</span><span class="hl-code">;
  </span><span class="hl-types">int </span><span class="hl-identifier">life</span><span class="hl-code">;
</span><span class="hl-brackets">} </span><span class="hl-identifier">Player</span><span class="hl-default">, *</span><span class="hl-identifier">pPlayer</span><span class="hl-default">;

</span><span class="hl-comment">// 関数を定義する例
</span><span class="hl-types">void </span><span class="hl-identifier">InitializePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">FinalizePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">UpdatePlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;
</span><span class="hl-types">void </span><span class="hl-identifier">DrawPlayer</span><span class="hl-brackets">(</span><span class="hl-identifier">HWND hWindow</span><span class="hl-code">, </span><span class="hl-identifier">HDC hBackBuffer</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-prepro">#endif</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/399/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

