C言語 入門 小学生でもわかるC言語3

十二日目 ソース分割2

「わかりやすく!」がテーマです!

HOME/小学生でもわかるC言語3 目次/十二日目 ソース分割2/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

?と思ったら

わからなそうな用語集

ソース分割2

前回に続いてソース分割をやっていきます。

通常の変数を渡すやり方を見ていきましょう。

「int main()」

/*プログラム29その1*/
#include <stdio.h>
#include "hello_world.h"

int main(){
	int suji = 101;
	
	hello_world(suji);

	return 0;
}

今度はグローバルではなく通常の変数「suji」を関数「hello_world()」に渡してみます。

この時の「hello_world.h」と「hello_world.cpp」はどのようになっているかといいますと

「hello_world.h」

/*プログラム29その2*/
void hello_world(int );

「hello_world.cpp」

/*プログラム29その3*/
#include <stdio.h>

void hello_world(int suji){
	printf("%d回目のhello world\n",suji);
}

■実行結果■

実行結果(i-12-1)

そのまま引数で「void hello_world(int suji)」と渡すだけです。

通常の変数を渡す時は特に変わった事はせずにいつも通りで大丈夫そうですね!

複数でも大丈夫です

これまでのソース分割では一つの関数しか分割してなかったので分割ファイル一つにつき一つの関数と見えてしまうかもしれませんが、もちろん複数の関数でも大丈夫です。

「hello_world.h」

/*プログラム30その1*/
void hello_world(int );
void hello_world2(void);

「hello_world.cpp」

/*プログラム30その2*/
#include <stdio.h>

void hello_world(int suji){
	printf("%d回目のhello world\n",suji);
}

void hello_world2(){
	printf("hello world\n",suji);
}

こんな感じで複数の関数を「分割した一つのファイル」に書いても、もちろん大丈夫です。

二重include防止

それでは最後に2重include防止というのを見ていきましょう。

これはプロトタイプ宣言を2度以上行うとエラーになってしまうというのを防止するものになります。

どういう事かといいますと、たとえば「hello_world.h」を他にもいろいろな場所で使いたくなった時にそれぞれのファイルで

#include "hello_world.h"

とインクルードします。

その時に当たり前ですがその中身も毎回読み込まれるのでヘッダファイルに書いてあるプロトタイプ宣言も何回もしてしまうような事になるのです。

ではそれを防ぐ方法は見てみましょう。

「int main()」

/*プログラム31その1*/
#include <stdio.h>
#include "hello_world.h"

int main(){
	int suji = 101;
	
	hello_world(suji);

	return 0;
}

「hello_world.h」

/*プログラム31その2*/
#ifndef _HELLO_WORLD_H_
#define _HELLO_WORLD_H_

void hello_world(int );

#endif

「hello_world.cpp」

/*プログラム31その3*/
#include <stdio.h>

void hello_world(int suji){
	printf("%d回目のhello world\n",suji);
}

■実行結果■

実行結果(i-12-2)

「hello_world.h」に注目です。

それ以外は変わりありません。

#ifndef _HELLO_WORLD_H_
#define _HELLO_WORLD_H_
	void hello_world(int );
#endif

この「#ifndef 〜」は「#define」されていなければという意味になるのでこの場合は

「_HELLO_WORLD_H_」が「#define」されていなければという意味になります。

そして「_HELLO_WORLD_H_」が「#define」されていない場合はその続きの「#define _HELLO_WORLD_H_」とプロトタイプ宣言の「void hello_world(int );」を実行します。

そして次がポイントですが次回は「_HELLO_WORLD_H_」はすでに「#define」されているので、そのまま「#endif」までプロトタイプ宣言を越えてジャンプするのです。

なので2重にプロトタイプ宣言するのを防げるというワケです。

この「_HELLO_WORLD_H_」の部分はヘッダファイルの名前をここに入れるというのがお約束になっております。

それでは次回はメモリを自由自在に確保してみます。

次回

十三日目 メモリ確保

□ページの先頭へ□

□目次へ戻る□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本