<?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%83%97%e3%83%ad%e3%83%88%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%a3%e8%a8%80/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/414</link>
		<comments>http://www.game-create.com/archives/414#comments</comments>
		<pubDate>Fri, 04 Jul 2008 08:11:18 +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=414</guid>
		<description><![CDATA[自分で作った関数の存在を他の関数やファイルに教えるためには、関数のプロトタイプ宣言を記述します。

関数は基本的に自分以外の関数の存在を知りませんが、あらかじめプロトタイプ宣言をしておくと、他の関数の存在を知ることができ [...]]]></description>
			<content:encoded><![CDATA[<p>自分で作った関数の存在を他の関数やファイルに教えるためには、関数のプロトタイプ宣言を記述します。</p>
<p><span id="more-414"></span></p>
<p>関数は基本的に自分以外の関数の存在を知りませんが、あらかじめプロトタイプ宣言をしておくと、他の関数の存在を知ることができ、自分の関数の中から他の関数を使うことができるようになります。</p>
<p>関数のプロトタイプ宣言は、その関数を使いたい場所より前に書く必要がありますが、その書き方は非常に簡単です。関数の定義からブロックを省略するだけで済みます。</p>
<p>たとえば次のような関数があったとき…</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">result</span><span class="hl-code"> = </span><span class="hl-identifier">arg1</span><span class="hl-code"> + </span><span class="hl-identifier">atoi</span><span class="hl-brackets">(</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-reserved">return </span><span class="hl-identifier">result</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>プロトタイプ宣言は次のようになります。</p>
<div class="hl-surround" style="height:16.8px;"><div class="hl-main"><pre><span class="hl-types">int </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-default">;</span></pre></div></div>
<p>実際に main() 関数などから、この someFunction() 関数を使いたい場合は次のように書きます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// まずプロトタイプ宣言を書く
</span><span class="hl-types">int </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-default">;

</span><span class="hl-comment">// someFunction() を使う main() 関数を書く
</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">arg1</span><span class="hl-code"> = </span><span class="hl-number">10</span><span class="hl-code">;
  </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">30</span><span class="hl-quotes">&quot;</span><span class="hl-code">;

  </span><span class="hl-reserved">return </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-comment">// someFunction() 関数の本体を書く
// 必ずしもここに書く必要はなく、別のファイルでも問題なし
// ただし、その場合でもプロトタイプ宣言は必要になる
</span><span class="hl-types">int </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">result</span><span class="hl-code"> = </span><span class="hl-identifier">arg1</span><span class="hl-code"> + </span><span class="hl-identifier">atoi</span><span class="hl-brackets">(</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-reserved">return </span><span class="hl-identifier">result</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
<p>プロトタイプ宣言はヘッダファイルの中に書くのが一般的です。 #include を使うことで大量の関数のプロトタイプ宣言を一気にインポートできるからです。一番わかりやすい例が windows.h です。 Windows のプログラムを開発する場合には必ず #include <windows.h> と書いてきましたが、この windows.h の中では膨大な数のプロトタイプ宣言が書いてあります。これは Windows が持っている関数の存在を自分のソースコードに教えていることに他なりません。</p>
<p>ちなみに、関数を使う前に関数の定義が来ている場合はプロトタイプ宣言が不要です。たとえば次のコードは問題なく動作します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// someFunction() 関数の定義を前もって書いておき、
// プロトタイプ宣言は書かない
</span><span class="hl-types">int </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-types">int </span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)
{
  </span><span class="hl-types">int </span><span class="hl-identifier">result</span><span class="hl-code"> = </span><span class="hl-identifier">arg1</span><span class="hl-code"> + </span><span class="hl-identifier">atoi</span><span class="hl-brackets">(</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-reserved">return </span><span class="hl-identifier">result</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-comment">// someFunction() にはプロトタイプ宣言がないが、
// すでに上で定義済みなので問題なく使うことができる
</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">arg1</span><span class="hl-code"> = </span><span class="hl-number">10</span><span class="hl-code">;
  </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">arg2</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">30</span><span class="hl-quotes">&quot;</span><span class="hl-code">;

  </span><span class="hl-reserved">return </span><span class="hl-identifier">someFunction</span><span class="hl-brackets">(</span><span class="hl-identifier">arg1</span><span class="hl-code">, </span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-brackets">}</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/414/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

