このページを読む気になってくださり、ありがとうございます。
C/C++言語の参考書は世の中に腐るほど出回っていることでしょうが、僕が思うに参考書というものは書いてあることが固っ苦しくて、ずぶの初心者達にはとっつき難いものに見えてなりません。
確かにプログラムをある程度組める僕とかが読めば、自分の知識と照らし合わせて更に新しい知識を得ることが出来ますが、前知識無しの状態で参考書と睨めっこしても、なかなか知識を読み取るのは困難なことでしょう。
僕はこの前知識と言えるものを、専門学校の授業として教わりました。
プログラミングの講師より「こうしてあーしてこうすると、プログラムが組めるよ」と聞き、最初の段階である「Hello world」を組みました。
プログラミング知識が0から1になった瞬間です。
その後は参考書の知識もすんなり頭に入ってくるようになり、色んなプログラムを黙々と組んでC/C++言語を習得しました。つまりはかけ算と似ていて0にどんな数値をかけ算しても0ですが、1にかけ算すればかけた数値になります。更に知識を増やして2や3の知識で参考書を読めば、自分の知識は跳ね上がります。
プログラム習得で最初の方でつまずく人は、その0から1になれていないことが多いと僕は思います。何故なら難解な参考書を開いただけであまりの情報量に頭が痛くなり、サンプルプログラムを組んでみようという気が無くなるからです。
しかも、無駄とも思える内容のサンプルプログラムを延々と組ませ、必要知識を得るためには、何百ページもの情報を読んでいくことになります。気が遠くなる話です。
でも、プログラムを組める僕から言わせてもらえば、そんなことをせずとも良いです。
分厚いプログラミング言語の参考書を何百ページも暗記する必要なく、C/C++言語のプログラミングの基礎を学ぶ方法を、このページにて提供致します。
なお、このページと同じ内容のPDFレポートも配信しております。下記リンクよりダウンロードできますので、もし宜しければどうぞ。
つべこべ言わず組んでみよう
↑右クリック、対象をファイルに保存でダウンロード。
正直に言うと、この「必要なものを揃える」のがC/C++言語の習得にて一番大変な部分だと思います。
でも自分の為に投資する覚悟があるなら、この問題は解決できたも同然です。
最寄の電気屋さん等で「Microsoft Visual C++」等のソフトをお買い上げ下さい。
おそらく高額なので、買うのは困難かもしれませんが、開発環境が無ければプログラムは組めませんし、買う以外で開発環境を整えるのにはそれなりの知識が必要になるかもしれませんので覚悟してください。
ちなみに、僕がC/C++言語でのプログラムを組むときに使用している開発環境(ソフト)は「Microsoft Visual C++ 6.0」です。かなり古いものですが、問題なく愛用しています。
マイクロソフトのホームページにて、「Microsoft Visual C++」の無料バージョンのものをダウンロードするという方法もあります。
Visual Studio 2008 Express Edition
こちらはいつまで無料で提供されているのか等は不明なので、リンク切れしていたり、無料公開の「Microsoft Visual C++」がダウンロード出来なかった際の文句は、一切受け付けません(……ってか、そういった質問やクレームは勘弁して下さい)
あと、プログラムを組んでいる画面のスクリーンショット図面を所々に組み込んで解説していきますが、僕が使用している「Microsoft Visual C++ 6.0」は、かなり古いものですので、最新の「Microsoft Visual C++」とはデザインが違っていたり、プロジェクト構成等の設定方法が若干違っているかもしれませんが、脳内補完で補ってください。
僕は常日頃から思っていることは、「パソコン初心者にとってプログラムのプロジェクト構成はかなり難しい」ってことです。
僕は「Microsoft Visual C++ 6.0」のコンパイラ(統合開発環境)を持っており、それで大抵のプログラムを組んでおりますが、コレがパソコン初心者にとっては余計な機能が多くて非常にとっつき難いものになっています(苦笑)
一応、パソコンに関してもプログラムに関しても上級者に位置する僕からすれば、いらない機能は無視して、必要な機能を色々応用して使いこなせていますが、ずぶの初心者にしてみたら「Hello world」を組む前に、「どうやったらプログラムが組めるのですか?」っていうふうに根本的な部分でつまずいてしまう事でしょう。
そこでそんな「ずぶの初心者」達のために、最も簡単なC/C++言語のプログラムが組めるDOS(コンソール)プログラムのプロジェクトの作り方を親切に図面付きで解説します。
僕が持っている環境が「Microsoft Visual C++ 6.0」のみなので、他の環境だと色々と応用して対処しなければなりませんが、大抵は似たり寄ったりでしょう。多分……。
ひとまず最も簡単な環境で、最も簡単なプログラムを組んでもらうために、コンソールプログラム(DOS)のプロジェクト構成のやり方をお教えします。
「バカにしてるのか?」って思えるほど一つ一つを細かく分けて解説していますので、やる気さえあれば誰でもプロジェクト構成が出来ることでしょう。
それでは避けては通れない最初の難関、プロジェクト構成に挑戦してみてください。
1、プロジェクトの新規作成
「Microsoft Visual C++」を立ち上げ、メニューバーの「ファイル(F)」から「新規作成(N)」を選択します。
2、プロジェクトの選択
「新規作成」のウィンドウが出たら「プロジェクト」タブであることを確認して、「Win32 Console Application」を選択します。
ちなみにまだ「OK」は押せません。
3、ディレクトリの選択
「位置(C)」のテキストボックスの右側にあるボタンを押すと、プロジェクトを作成するディレクトリを選択できます。
ここでデスクトップ等、わかりやすい位置に設定します。
なお、この例ではわかりやすいようにCドライブの直下の位置を選択しています。
ディレクトリの意味がよくわからないという方は図と同じ箇所(Cドライブの直下)を選択して「OK」を押しましょう。
4、プロジェクト名の入力
「プロジェクト名(N)」を入力します。この例では「test」と入力しています。
プロジェクト名を入力すると、「位置(C)」のテキストボックスの行末にもプロジェクト名が書かれます。
確認したら、いつの間にか押せるようになっている「OK」を押します。
5、空のプロジェクト作成
「空のプロジェクト(E)」を選択して「終了(F)」を押します。
6、新規プロジェクト情報の確認
「新規プロジェクト情報」を確認したら「OK」を押します。
7、ワークスペース
画面の左側に「test クラス」と書かれたウィンドウが出来あがっています。
それが「ワークスペース」です。
8、ソースファイルの新規作成
再度、メニューバーの「ファイル(F)」から「新規作成(N)」を選択します。
「新規作成」のウィンドウが出たら「ファイル」タブであることを確認して「C++ ソースファイル」を選択します。
ちなみにまだ「OK」は押せません。
9、ソースファイル名の入力
「ファイル名(N)」のテキストボックスに「main.cpp」と入力します。
この「*.cpp」という拡張子は「C(シー)++(プラスプラス)」の略であり「C++言語」のソースファイルだという事になります。
別に「main.c」として「C言語」としてしまっても良いのですが、C++言語の方が便利機能もありますし、C言語の機能もほぼ完全に網羅しているので問題は無いでしょう。
ファイル名を入力したら「OK」を押しましょう。
10、プログラムの準備完了
右側にテキストエディット画面が出来上がっていればプロジェクト完成です。そのままプログラムを組むことが出来ます。この例と全く同じ手順で作成した人は、マイコンピュータを開いてCドライブの直下を確認してみると「test」というフォルダがあるはずです。
それを開くと、下のようなファイル構成になっているはずです。プロジェクトを作るのが面倒くさいという人は、この「test」フォルダをテンプレートとしてコピーしておくと便利です。このプロジェクトを一度閉じた後、再度開きたい場合は、「test.dsw」をダブルクリックしてください。
これより本格的にC/C++言語に関して解説していきたいと思います。
つまり、ここからが「つべこべ言わず組んでみよう」の本題とも言えます!
サンプルプログラムを100回読むよりも、1回でも実際に自分で打ち込んでみて、どのように動作をするのかを体感してみるほうが効果的です。
そういうわけで「とにかく組む」ことに重点を置いて、サンプルプログラムのソースだけいくつか用意してみました。解説に関しては大まかにしかしていないので、僕の解説で大まかな概要をなんとなく覚えて、それから参考書等で正しい知識を身につけましょう。
参考書などの固っ苦しい解説でも、前知識がある程度あれば意外とすんなり頭に入ってくれる場合があります。いわゆる階段の原理と同じで、一階から二階にジャンプして登るのは、常人には厳しいものがありますが、階段を一歩一歩着実に登ることなら、誰でもできますよね?
そんな階段の一段のように簡単なところから体に叩きこめるサンプルプログラムを図面つきで大雑把に説明していきます。
もしプログラムをしていてわからないことがあったら、とりあえず後回しにして「つべこべ言わず」サンプルプログラムを組むか、Google等で検索してください。
このページはただ読むだけなら何の価値もありません。このページがキッカケでプログラムを組む気になり、これより下に載っているサンプルプログラムを何度も組んでみて、実際に実行してもらえる事こそ僕の望みです。
とにかく行動あるのみです! プログラムを組む前から頭で理解しようとしても時間がかかるだけですから、そんな暇があったら一回でも多くプログラムを組み「体に刻み込むように」覚えていってください。
0、よくあるコンパイルエラー(笑)
全くの初心者の為に、プログラムを組む時の注意点を一つだけ伝えておきます。
error C2018: 文字 '0x81'は認識できません。
error C2018: 文字 '0x40'は認識できません。
ソースを見た限りおかしなところは無いのに、上記二つのコンパイルエラーが出た場合、プログラムのどこかに「全角スペース」を使ってしまっています。
C/C++言語では原則的に「全角文字」は使用できません。
特に「全角スペース」をどこかに入れてしまうと、見た目はどこもおかしくないのに何故かエラーが出るという不可解な状況に陥ります。
もしも上記のコンパイルエラーが出た場合、エディタの検索機能で「全角スペース」を検索し消すか、「Tab」もしくは「半角スペース」に置き換える等の対処をしてください。
1、最も短いプログラム(笑)
たったコレだけです。このプログラムが組めないという人は、パソコンの入力自体がまともに出来ないって事になります。
「void」って字が青くなっていない人は、おそらくスペルがミスっています。そして「mein」ではなく「main」です(笑)
とりあえずコンパイルしてください。キーボードの「F7」でコンパイルです。
エラーが出なければ、まぁ成功でしょう。実行はキーボードの「F5」で可能ですが、一瞬黒い画面がパッと現れてパッって消えるだけです。
このプログラムではC/C++言語で必ず必要な、処理の開始位置である「メイン関数」を宣言しています。……それだけで他の処理は一切何もしていません(苦笑)
だから言ったでしょ。「最も短いプログラム」だって(微笑)
2、コメントは目に優しい(笑)
緑色の文字で「// これはコメント」「/* これもコメント */」と追加されました。なんで緑色なのかというと、それはコメントだからです(微笑)
この緑色のコメント部分では、先ほど使用できないと書いた「全角文字」も使うことが出来ます。勿論「半角文字」も使えますし「全角スペース」もどうぞご自由に。なぜなら、この緑色のコメント部分に何を書いたとしてもプログラムには反映されないからです。
なぜこんな機能があるかといいますと「目に優しいプログラム」にするためです(笑)
コメントはプログラムの説明書きとして使う機能です。
プログラムを組んでいると、所々に難解なアルゴリズムを組んでしまうことがあります。そのアルゴリズムがどんな処理をしているのかを端的にコメントで説明書きを残しておくと、後々手直ししたり、ソースを読み直したりするときに大変便利です。
人にはそれぞれ限界がありますから、計算式を見ただけでそれがどんな動作をするか見分けるのにはそれなりに時間を要します。でもコメントをつけておけば、その難解な計算式の意味が一瞬でわかります。つまりソースをガン見しなくてもいいので目に優しいです。
もし、あなたが難解な計算式を一目見ただけでどんな処理をしているのか理解できる人ならコメントをつけろと強制はしませんが、そうでないならコメントをつける事を強くオススメします。複数人でプログラムを組んでいるのならコメントは必須です。
3、はろ〜、わ〜るど(笑)
イキナリ行数が増えたからといって、驚かないで下さい。ほとんどがコメントですので。実際に増えた処理は「#include <stdio.h>」と「printf( "Hello world" );」だけです。
インクルードを解説するのは少々面倒なので興味のある方は自力で調べて〜(オイッ!)
んで、なんとなく見てわかりそうなのは「プリントエフ」の方ですね。ダブルクォーテーション(")で囲われている文字列を画面に表示するんですよ。ほんの一瞬だけ……
文末のセミコロン(;)は日本語で言う「。」と同じ意味合いで、処理の区切りを意味しますので、必ずつけて下さい。プログラム言語は書式にうるさいので、几帳面にしっかりとつけて下さい。
そこで「ん? じゃあなんでインクルードの方には、セミコロンが付いてないの?」って思った人はカンが鋭いです。それはインクルードの書式の方が特殊なのです。……なので疑問に思った方は、自力で調べてスッキリ理解してください(笑顔)
4、見えねぇよ! ってお方に(笑)
僕も動体視力が弱いので、処理が速すぎで「Hello world」の文字が見えません。なので「getchar();」という処理を「プリントエフ」の下の行に追加しました。
すると、どうでしょう……。「F7」でコンパイルし、「F5」を押してプログラムを動かしてみると、黒いコンソール画面に「Hello world」と、白い文字がしっかり出ています。「Enter」キーを押せば、黒いコンソール画面が消え、プログラムも終了します。
これで色々テストしやすくなりましたね(やったー)
ためしに「プリントエフ」の「ダブルクォーテーション」で囲われた部分の文字を書き換えてみてください。ちなみにその部分にも例外的に「全角文字」を使うことが出来ます。
5、なんか変な世界(笑)
「ゲットキャラ」を追加して処理が見えるようになったとき、素直に「Enter」キーを押した人は気が付かなかったと思われますが、適当なアルファベットを入力すると……とても変なことに、黒い画面に文字を入力できてしまいます(苦笑)
せっかくの「Hello world」が変になってしまった瞬間です!
これは「ゲットキャラ」が「画面を見えるようにする処理」をする機能(関数)ではなくて、文字入力を受け付ける機能だからです。文字を受け付けている間は処理が止まっているから、出力結果である「Hello world」が見れます。そして「Enter」キーを押せば入力受付を終了し「ゲットキャラ」はその結果を出すんですが、それを受け取ってないし、その後に何の処理も無いため、プログラムが終了し画面が消えてしまうということです。
……ってことで、あんまり気にしないで下さい。どうしても気になるなら自分で検索して調べてみるのもアリですけどね。
6、改行コード
「ゲットキャラ」の変な仕様がわかったところで、ついでだからその機能をありがたく利用させてもらい、「改行コード」の説明をすることにします。
上のプログラムと下のプログラムそれぞれにソースと処理結果を載せましたが違いがわかりますか? ちなみに処理結果の方の「Hello world」の後に続く文は僕が適当に打ち込んだものなので、過度な期待はしないで下さい。
ソースの違いは「ダブルクォーテーション」で囲まれた「Hello world」のところで、下のソースには「¥n」が追加されています。これが「改行コード」です。
この記号が追加された下の方の処理結果では、僕が適当に打ち込んだ文の部分が改行されて表示されていることがわかると思います。
7、変数
↓サンプルソース
↓処理結果
イキナリ処理の行数が増えたからといって、驚かないで下さい。
よく見ると無駄に沢山ある「プリントエフ」の部分は、変な書き方に変わっているけど全部同じです。だって全部コピペしただけなので〜(苦笑)
そして「メイン関数」の一番最初に「int data = 10;」って書いていますけど、コメントによると「変数dataを宣言し10を代入し初期化」となってます。
変数というのは、よく「箱」にたとえられます。
まず、その箱がどんな形なのか決めて、名前を付けてあげます。
上記の変数宣言例では、この形(型)を「int」とし、名前を「data」としています。この名前の部分は半角英数文字なら自由につけられますが、最初の一文字には数字を使えません。
・変数名の大丈夫な例
data
Data(大文字も使用可能)
DATA
DaTa
a(一文字だけでもOK)
a2
a123456789(最初の一文字以外は好きなように数字を使ってOK)
a_2(区切り文字としてアンダーバーを使うこともできる)
・変数名のダメな例
3b(最初の一文字が数字)
b 3(途中に半角スペースが入っている)
b(全角文字は論外)
今の段階でよくわからないのなら、とりあえず型を「int」と宣言すれば、整数の箱が出来上がるということだけ覚えていてください。
でも変数はプログラムの基本なので、変数の「型」についても、いずれは必ず覚えてくださいね。
さて、宣言に関して大まかに述べたので、次は「10を代入し初期化」のところについて、軽く解説します。
「int data = 10;」と一行で書いていますが、実はこれで二つの処理をしているのです。分解すると「int data;」と「data = 10;」になります。
「int data;」は、先ほどはしょりはしょりで解説した変数の宣言に関してですね。では「data = 10;」が、「10を代入し初期化」ということになります。
ここで勘違いしやすいのは「=」の意味です。
C/C++言語では「=」は「左の変数に右のデータを代入」という意味になります。つまり、「data = 10;」は「dataは10と等しい」ではなく「dataに10を代入」という事になります。
ようするに「10を代入し初期化」というのは「dataに10という最初の数値を入れる」という、たったそれだけのことです。
今回「プリントエフ」の説明は省略させてもらいます。とりあえずこの「%d」と書いた所に変数「data」の中の数字を表示して、その後の改行コードによって改行します。
もし、自力で調べたい方に対してのヒントはprintfの「f」の意味は「フォーマット」を意味します。「printf フォーマット」等の条件で検索をかけてみてください。
話を戻すと、この最初の「プリントエフ」では「10」と表示されて改行されます。そして次は「5」を代入していますので、「5」と表示して改行します。
その次には変数「data」をそれぞれ「++」「+=」「--」「-=」として、そのつど表示していますが、これらは変数の数値を変える計算式です。それぞれの式の内容はコメントの通りです。これら以外にも計算式は沢山ありますので、必要に応じて調べてください。
こちらは「C言語 演算子」等で検索すれば目当ての情報を見つけられることでしょう。
今まで知らなかった計算式(演算子)を見つけたのなら、このプログラムを書き換えてその計算式を使い、変数の数値がどのように変化するか実際に確かめてみてください。
情報を何度も読むより、一度でも使ってみて体で覚えてください。
与えられたサンプルプログラムを組んで「ハイ終わり」ではなく、所々を書き換えてみて「この場合はどう動くのだろう」とか「こうしたらこうなるんじゃないか」とか考えて、自分なりのソース実験をしてみてください。
それが本当の意味での自分の知識になりますし、地道な方法ではありますが、繰り返せばプログラムを組む上で大切な「応用力」を身につけることもできます。
8、繰り返しのfor文
↓サンプルソース
↓処理結果
ソースが短くなりました(笑)
その代わり、「for( i = 0; i < 10; i++ )」という、変な式がありますね。
コメントによると「10回繰り返す」との事。
では、これを「100回繰り返す」に書きかえられますか? ここまで真面目にやってきたなら余裕でしょう(笑)
少し考えてみてから次の文の答えを見てくださいね。
「for( i = 0; i < 100; i++ )」にすればいいだけですね。これが「for文」の主な使い方です。変数を使って繰り返すのにとても便利です。
さて、ではこの「for文」を解読してみましょう。かっこの中に計算式が三つあります。そのうち二つは、皆さんもおそらくわかりますね。「i = 0」「i++」です。
左の「i = 0」は「for文」の一番最初の一回だけ、処理されます。
ループ用の変数である「i」に「0」という最初の数値を入れています。
そして右の「i++」は、変数の数値を1増やす「インクリメント」ですね。
この処理は「for文」のすぐ後に続いている「{」から「プリントエフ」の次の行にある「}」までの処理が終わったら、実行されます。
問題は真ん中の「i < 10」ですね。これは条件式といいます。
for文は、左が「前処理」右が「後処理」そして真ん中は「ループ条件」となります。
このサンプルの条件式は見たまんまで「変数iが10未満だったら」という条件になります。この条件を満たしているなら「{」と「}」で指定している処理を実行します。
この条件式のチェックは「前処理」もしくは「後処理」が終わるたびに行われます。
このサンプルプログラムの処理の流れを表すと、
・ループ用変数「i」宣言
・「for文、前処理」で「i」に0を代入し初期化
・「for文、ループ条件」チェック(iの数値は0)
・条件を満たしていたので「プリントエフ」を実行
・「for文、後処理」で「i」をインクリメント
・「for文、ループ条件」チェック(iの数値は1)
・条件を満たしていたので「プリントエフ」を実行
・「for文、後処理」で「i」をインクリメント
〜中略〜
・「for文、ループ条件」チェック(iの数値は10)
・条件を満たしていないので繰り返し終了
になります。
処理結果を見るとわかると思われますが、変数「i」の数値は0〜9でループされ、10回繰り返されていますね。
プログラムにおける数値の開始は「1」ではなく「0」とするように癖をつけておくと良いです。
このことに関しては以前、僕のメルマガでも発行しましたが今回は「プログラムにおいて0は重要な意味がある」とだけ覚えていてくださいね。
細かい部分はいろいろとはしょっていますが、for文での繰り返しループは色んな場面で使うので、せめて「for( i = 0; i < ?; i++ )」の形(?は繰り返したい回数)だけは覚えておくと後々便利です。
9、インデント
今まであえて触れませんでしたが「メイン関数」の後の「{」や上記のfor文のソースでも「{」の後に続く処理の前にTabが入っています。「メイン関数」の後に続く所には1つ、for文の後に続くところには「メイン関数」のものとあわせて2つ入っています。
このように、読みやすくするため字下げするのをインデントといいます。
これらは別に半角スペースでも構いませんが(勿論全角スペースはダメです)、きちんとつけておくことをオススメします。
↓インデントをつけていないソース
上のソースを見てもらえばわかる通り、インデントをつけていないと読み辛いですよね。
わかりやすく読みやすいソースにすることを心がけましょう。
10、条件分岐のif文
↓サンプルソース
↓処理結果
先ほどのループ内に「if( 0 == i%2 )」という変な処理が追加されました。
このなかの「0 == i%2」は「for文」のところで出てきた条件式です。
ちなみにこの式を書くと、変数「i」の数値が偶数なら条件を満たしていて、奇数なら条件を満たしていないということになります。
この式の細かな解説はしませんので、どうしてそうなるのか自力で調べてみて下さいね。
「%」の演算子の意味を調べて、ちょっと計算してみればわかると思います。
この条件分岐により、変数「i」が偶数だったら偶数だと表示されるようになりました。
条件式を色々変えてみて、色々試してみると良いですよ。
このページは過去に配信したメルマガの内容をいくつかまとめたものです。
メルマガ発行した後にしばらくアクセス解析してみると、プロジェクト構成やプログラムに関しての検索ワードで僕のサイトに訪れる方が結構いらっしゃったので、その内容をここにまとめさせて頂きました。
つべこべ言わず、これらのプログラムを組めば、簡単な基礎は身に付くと思われます。
基礎があれば、キチンと解説されているサイトや参考書等もすんなり読めると思われますので、正しい知識をどんどん吸収できることでしょう。
これらのサンプルプログラムで満足せずに、自分から色々調べていってプログラムの知識を深めていって欲しいです。
ちなみにこのページはリンクフリーです。
もし宜しければリンクしていただけるとありがたいです。
一人でも多くの人に「プログラミングは楽しい」と思って頂けるように、これからも有益な情報を配信していきたいと思いますので、どうかよろしくお願い致します。
なお、このページでのC言語のサンプルソースを一通り組み上げることが出来たのなら、あなたは既にゲームプログラムをも勉強できる段階まで到達しております!
ゲームプログラムを習得したい方は下記フォームのメール講座を受講することをオススメします。