数独自動生成ソフト開発で学ぶ超初心者のためのC++マルチスレッドプログラミング入門
第1講 序章(周辺の説明とプログラミング体験)
第9話 Visual Studio 2022によるC++のプロジェクトを体験しよう!
それではVisual Studio 2022によるプロジェクトを体験しましょう。
第8話でピン留した
![]()
でピン留した
をクリックしてVisual Studio 2022を起動させましょう。
すると次のような画面が現れます。

ただし、皆さんは初めて起動するので赤で囲ってある部分は当然ありません。
というのは、この赤で囲ってある部分は過去に起動したプロジェクト一覧であるからです。
さて、画面右側にある

の新しいプロジェクトの作成(N)をクリックしましょう。
すると

となります。赤い囲いで囲んであるからのプロジェクトをクリックして選んでから
右下にある次へ(N)をクリックします。

私はプロジェクトをたくさん作ってきましたからProject8となっていますが、
皆さんはProject1となっていると思います。
これはプロジェクトの名前ですから何でもよいのですが、
今はProject1のままで画面右下の

作成をクリックしてください。

すると上のよう画面が現れます。
画面右上の
(皆さんの場合はProject1です)の青い囲いのところで
右クリックをします。
追加を選んで

新しい項目をクリックします。

名称はFileNameのままでも結構ですが、
漢字を使えますのでFileNameを

はじめてのプロジェクト体験と変更して追加ボタンを押してください。

ダークブルーだったところが白に変わり1と番号が付きます。
そして、この白いところにコード(プログラムの文章)を記入していきます。
1つでもタイピングミスがあると、エラーしますからはじめのうちはコピペしてください。
#include<iostream> //coutを使うために必要な部品を組み込んでいる
#include<conio.h> //while (!_kbhit())を使うために必要
using namespace std;//coutを使うときに必要です。
int main() {//私は社長だ、現時点では社員は私一人ですが、
//講義が進展していくといろいろな社員を雇う!
cout << "プロジェクト体験" << endl;
while (!_kbhit());//待機させるための役割を持つ
}
コピペ用テキストファイル
コピペ用のテキストファイルも入れておきますが、
本文もそのままコピペできます。
テキストファイルをクリックした場合はブラウザの戻るで戻ってください。
私は
#include<iostream>
#include<conio.h> //while (!_kbhit())を使うために必要
using namespace std;
int main() {
cout << "プロジェクト体験" << endl;
while (!_kbhit());//待機させるための役割を持つ
}
と詰めて記述してしまいますが、それは悪弊なので皆さんは
#include<iostream>
#include<conio.h> //while (!_kbhit())を使うために必要
using namespace std;
int main() {
cout << "プロジェクト体験" << endl;
while (!_kbhit());//待機させるための役割を持つ
}
空白行を入れる習慣を見つけてください。
理由は、読みやすくなるからです。
この講義も空白行を入れています。
読みやすくするためにです。
では、はじめてのプロジェクトを体験する準備ができましたので、
体験しましょう。
キーボードの一番上の行にF1~F12までのキーがあります。
ファンクションキーと言います。
キーの役割を覚え、
マウスでクリックするのではなくキーボードのキーを使う習慣を身につけてください。
最初は悪い方の例でやってみます。

デバッグ→デバッグの開始の順にクリックしてください。

次は、一度黒い画面を閉じてからファンクションキーのF5をしてください。
そうすると、全く同じ画面が出てきます。
『デバッグ→デバッグの開始』はF5でできるのです。
緑に注目してください。
昔はプログラムの実行と言っていましたが、
プログラムの実行=デバッグの開始=F5と考えてもよいでしょう。
本来はデバッグは(プログラムの欠陥を虫と呼んできました。
バッグが虫でデが取り除く)プログラムの欠陥を修正する作業のことですが、
と画面が出てくれば、
プログラムコードに何も問題がなくプログラムが実行されたことを意味します。
プログラムを実行させるときにはF5を押せばよいことを覚え、
マウスを使わずに直接実行させる習慣を身につけてください。
尚、関数名に漢字が使えると書きましたが唯一使えないものがあります。
それはmain() です。main() には社長の役割が与えられているので、
main() だけは変更できないのです。
main()以外の関数はお互いに仕事を依頼しあったりしますが、
main()に命令することはできません。
一般企業と同じです。
社長は社員に命令することができますが、
社員は社長には命令できませんね。
#include<iostream> //coutを使うために必要な部品を組み込んでいる
#include<conio.h> //while (!_kbhit())を使うために必要
using namespace std;//coutを使うときに必要です。
int main() {//私は社長だ、現時点では社員は私一人ですが、
//講義が進展していくといろいろな社員を雇う!
cout << "プロジェクト体験" << endl;
while (!_kbhit());//待機させるための役割を持つ
}
の一文一文が気になるでしょうが、少しずつ説明していきます。
プログラミングを学習するときに、
全部一気に理解しようとする姿勢は、
学習の妨げになるだけで少しもプラスには働きません。
#include<conio.h> //while (!_kbhit())を使うために必要
while (!_kbhit());//待機させるための役割を持つ
の2つについてついては説明しておきましょう。
//が付いている文章を注釈文と言います。
C++(正確にはC++(のコンパイラ=人間にわかる言葉を0と1からなる機械語に翻訳するソフト))は
//が付いている文を読み飛ばします。
では何の働きがあるのでしょうか。
それは、プログラムを読む人のためにあります。
つまり、解説する役割を持っているということです。
プログラムを読む人の中には自分自身も入ります。
注釈文がないと、年数が立っているプログラムコードを理解するのは、
大変な作業です。
ですから、注釈文は解説文でこれがあると助かります。
#include<conio.h> の<>内のファイルをインクルードファイルと言います。
追加で読むこむファイルだと思ってください。
私は、部品の組み込みであると理解してプログラミングを35年間してきましたが、
なにも支障がありませんでした。
私は、今ヘーゲルやマルクスの読書会の司会をしていますが、
その読書会で私が常に強調しているのは、
哲学用語や経済学用語は大変意味の取りにくいものが多いが、
それらを自分の言葉に直して理解することが大切だと。
昔の学者は文法的に翻訳することが自分の務めだと信じ、
直訳的に訳してきました。
ところが、複文(英語でいう関係代名詞)を多用して
一文に入っている様々な言葉を修飾するドイツ語では、
直訳してしまうと非常にわかりにくい文章になります。
ドイツ語では主語と述語が明確で、
ドイツ語で読むときには文の構造がはっきりしていますから問題ないのですが、
直訳した日本語ではとても分かりにくい文章になります。
例をあげましょう。
「すなわち、比較的単純なカテゴリーは、比較的未発展なひとつの全体の支配的諸関係または比較的発展したひとつの全体の従属的諸関係-そうした諸関係は、その全体が、比較的具体的なカテゴリーで表現されているような方向へ発展するまえから歴史的には実在していたのであるが―を表現することができるということ、これである。」岩波文庫経済学批判P315
この文言は経済学批判序説で経済学の方法について、
マルクスが述べている言葉です。
おそらく10回読んだとしても??????ですよね。
あちらこちらで修飾しまくっているから、
呪文のように何を言っているのわからない文章になっています。
そこで修飾している複文をすべて取り除いてみると
「比較的単純なカテゴリーは、~を表現することができる」
~がわかればこの謎に満ちた文言の本当の姿を見ることができます。
~はふたつです。
ひとつめは「比較的未発展なひとつの全体の支配的諸関係」で、
ふたつめ「比較的発展したひとつの全体の従属的諸関係」です。
~に代入してみると
「比較的単純なカテゴリーは、比較的未発展なひとつの全体の支配的諸関係を表現することができる」と
「比較的単純なカテゴリーは、比較的発展したひとつの全体の従属的諸関係を表現することができる」
最初よりはわかりやすくなったとはとはいえ、
哲学や社会科学を読みなれていない人にはまだ難解です。
そこで、修飾している言葉をカットし、少し意訳すると
「比較的単純なカテゴリーは、(構造が単純な)社会の支配的諸関係を表現することができる」
「比較的単純なカテゴリーは、(構造が複雑に発展した)社会の従属的諸関係を表現することができる」
大分わかりやすくなりましたが、それでもまだまだ???です。
なのでさらに言い換えます。
「比較的単純なカテゴリーは、(構造が単純な)社会の全体を表現することができる」
「比較的単純なカテゴリーは、(構造が複雑に発展した)社会の部分を表現することができる」
どうです。やっと探求しているものが姿をあわわしたと思いませんか。
私は「翻訳をさらに自分の言葉に翻訳せよ!」と常に言っています。
ヘーゲルやマルクスの歴史認識では、単純な構造を持っている社会から
複雑な構造を持つ社会へと発展していく、とされています。
そして、簡単なカテゴリーはあまり発展していない社会の全体を表現できるし、
複雑に発展している社会の部分を表現できる、
のだと言っているわけです。
複雑さという観点では
あまり発展していない社会の全体=高度に発展している社会の部分
である、これがマルクスの言いたいことです。
高度に発展している社会の全体を表現するためには高度なカテゴリーが必要だ!
という解説を聞いてから
「すなわち、比較的単純なカテゴリーは、比較的未発展なひとつの全体の支配的諸関係または比較的発展したひとつの全体の従属的諸関係-そうした諸関係は、その全体が、比較的具体的なカテゴリーで表現されているような方向へ発展するまえから歴史的には実在していたのであるが―を表現することができるということ、これである。」岩波文庫経済学批判P315
を読み返すと、呪文でしかなかったわけのわからない文言が結構わかりやすくなっていませんか。
「翻訳をさらに自分の言葉に翻訳せよ!」という姿勢は、
プログラミングの学習においても同じです。
わかりにくい言葉は、わかりやすい言葉に置き換えるのです。
この講義ではカタカナ専門用語は使いませんが、
他の入門書籍や入門サイトでは乱発されます。
カタカナが出てきたらすべてわかりやすい漢字に置き換えればよいのです。
while (!_kbhit());を使うために追加でconio.hというインクルードファイルを読み込んだのです。
while (!_kbhit());は
という状態で待機させるためのものです。
キーボードから何かが入力されると黒い画面は閉じられます。
F5で実行しているときには不要ですが、
プログラムをEXEファイル=実行ファイルをダブルクリックして実行した場合には、
while (!_kbhit());がないとすぐに閉じられてしまい、
うまくいったか確認できませんのでwhile (!_kbhit());を入れて待機させているわけです。
EXEファイル=実行ファイルについては第11話で説明します。
第8話へ 第10話へ
トップへ