VisualStudio2013の使い方

VisualStudio2013 を利用したプロジェクトの作成方法
Win32 アプリケーションで Linxt 等と互換ソース環境)
1.プロジェクトの作成
VisualStudio(以下 VC)はソースコードや環境設定を従来の make ファイルなどとは異なり「プロジェク
ト」という概念で管理します。またプロジェクトを集めてまとめた物を「ソリューション」と呼びます。皆さ
んの場合は「プロジェクト」=「ソリューション」となります。
さてそのプロジェクトを作るにはメニューから「ファイル」
「新規作成」
「プロジェクト」を選択します。そ
して現れたダイアログの<VisualC++><空きのプロジェクト>を選びます。併せてプロジェクトの名前やフ
ォルダを確認します。このとき「ソリューションのディレクトリを作成」のチェックボックスは外してくださ
い。
2.ソースファイルの作成
プロジェクトができても「空きのプロジェクト」ではソースファイルも作成されません。ここでソースファ
イルを作ります。
「ソリューションエクスプローラ」の「ソースファイル」上にマウスを移動し、右クリツクし
て「追加」
「新しい項目」を選択します。そして、ダイアログで「C++ファイル」を選び、作成するファイルに
名前をつけ、
「追加」でプロジェクトに作成したファイルを登録します。
なお、すでに作成したファイルを使いたい(プロジェクトに追加したい)場合は「追加」の後に「既存の項
目」で、そのファイルを選択してください。
3.ソースコードの作成と旧書式エラーの排除
新規にファイルを追加するとファイルが開いて編集可能状態になります。これで main などを利用した一般
的な C 言語のプログラムを書くことができます。ただ、scanf などは古い関数で、セキュリティ上問題がある
ため、今では使われていません。しかし古い C 言語の教科書ではまだ利用されています。VC で scanf を含む
ソースをコンパイルすると scanf_s を使うようにエラー(警告)がでてしまいますので、エラーを無効にする
必要があります。そのためにはソースコードの最初に以下の行を追加してください。
#define _CRT_SECURE_NO_WARNINGS
4.コンパイルとリンク(ビルド)
VC ではコンパイルとリンク作業のことを「ビルド」と呼びます。ソースコードが完成したら「ビルド」を
行います。この前に、ソースコード上に「赤い波線」が無いか確認してください。ソースコード上に誤りがあ
る証拠です。下の例では文字数を数える関数に誤りがあると指摘されています。この場合、スペルは合ってい
るので #include <string.h> という文字処理関数の定義が無いのが原因です。
ビルド作業はメニューの「ビルド」
「Kadai1(作成したプロジェクト名)」により実行されます。このとき、フ
ァイルを変更されていることを意味しているファイルタブ「Kadai1.cpp*」から「Kadai1.cpp」となり「*」が
消えます。これは最新の状態になったことを意味し、自動的に保存されたことを示します。つまり、コンパイ
ル前に保存する必要はありません。
ビルドの結果は画面下の「出力」画面に結果が表示されます。正常に終了すれば「ビルド:1
正常終了」
となっています。エラーが出た場合はエラー行をダブルクリックしてください。修正が必要な箇所と原因が表
示されます。
5.実行
プログラムを実行するにはメニューの「デバッグ」
「デバッグなしで開始」をクリックします。デバッグでプ
ログラムの動きを追いたい場合には「デバッグ開始」で実行してください。ただし、プログラムの実行が終了
すると「Win32 のコンソール画面」も閉じてしまいますので、結果を画面に表示している場合は、画面結果を
残す設定を行う必要があります(補足7.1参照)
。
6.プロジェクトの終了と再開
プロジェクトを終了するにはメニューの「ファイル」
「ソリューションを閉じる」で終了します。またプロジ
ェクトを開くには「ファイル」
「開く」
「プロジェクト/ソリューション」を選択します。拡張子は「.sln」です。
7.補足
7.1 補足1 実行終了時の画面を見たい場合の設定
デフォルトでは開始した処理をアプリケーションとして実行するため、終了時には画面を閉じてしまいま
す。終了時の画面を残すためには、次の設定が必要です。
ソリューションエクスプローラのプロジェクト名、例では「kadai1」をマウスで選択し、プロパティを選
択します。そしてダイアログの「構成プロパティ」
「リンカー」
「システム」
「サブシステム」を選択し、リス
トから「コンソール(/SUBSYSTEM:CONSOLE)」を選択します。選択後は「適用」「OK」で設定を終了し
てください。
実行に当たってはメニューから「デバッグ」
「デバッグなしで開始」をクリックすることで実行され、アプリ
終了時に画面に「続行するには何かキーを押してください..
.」が表示されるので、終了するために何かキー
を押してください。なお「デバッグ開始」で実行した際は、終了時の画面は表示されません。
7.2 補足2 OpenGL/Glut を利用するための環境設定
Windows や Mac、Linux などで共通に利用できるグラフィックライブラリ(OpenGL/OpenGlut)を Win32
環境で動かすには設定が必要となります。まずは実行に必要となるライブラリファイル「glut.h」
「glut32.lib」
「glut32.dll」の準備です。これらはネットからダウンロードできますが、授業では配布します。
そしてこの中の「glut.h」
「glut32.lib」ファイルをプロジェクトフォルダの直下(下の例では Kadai2)に
コピーします。そして「glut32.dll」はさらに下のフォルダ「Debug」
「Release」にもそれぞれコピーします。
次に、プロジェクトのプロパティ(補足7.1参照)において「構成プロパティ」
「リンカー」
「入力」
「追
加の依存ファイル」の欄のリストを選択し「編集」を選択して「追加の依存ファイル」ダイアログに
「opengl32.lib」
「glu32.lib」
「glut32.lib」を入力します。入力後は「OK」を2回クリックして設定を終了し
ます。これで OpengGl/Ut が使えるようになります。なお使用に際して、ソースコードに 「#include “glut.h”」
が必要となります。
7.3 デバッグのチュートリアル
VC のデバッガーは強力で、これが使えるから VC を利用する価値があるともいわれています。すべてを
活用することは難しいですが、簡単な例を参考に使い方の一部を紹介します。
次のプログラムは最大10文字読み込み、逆順に並び替えて出力するプログラムです。しかし「abc」を入力
して実行すると「cb フ」と思ったとおりの「cba」が出てきません。さて何故でしょう。ここでソースコード
とにらめっこしても時間の無駄です。デバッグを実行してどこが悪いのか見つけていきましょう。
/*
課題1
入力した文字を反転する
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void main(void){
// 変数の定義
char str_Input[11];
// 入力文字
char str_Reversed[11];
// 出力文字
int nNum;
// 文字数
// 文字の入力
printf("文字を入力してください[max 10]\n");
scanf("%s", str_Input);
// 文字数のカウント
nNum = strlen(str_Input);
// 文字の反転と格納
for (int i = 0, j = nNum - 1; j > 0; i++, j--)
str_Reversed[i] = str_Input[j];
str_Reversed[nNum] = NULL;
// 反転文字の表示
printf("%s\n", str_Reversed);
}
デバッグでは、プログラム全体を大きく分けて、どこまで正常なのかを確認します。この例の場合「①入
力は正常か」
「②文字数は正常か」
「③反転は正常か」
「④出力は正常か」で分けるのが適当でしょう。これら
の4箇所にブレークポイントをかけて、どこまで正常に動いているか確認します。
ブレークポイントは対象ソースコード左側のグレーの部分をクリックすることで「設定/設定解除」ができ
ます。設定されるとクリックした位置に「赤い丸」が付きます。
では実行してみましょう。メニューの「デバッグ」
「デバッグ開始」でプログラムを起動します。入力画面で
「abc」を入力します。すると最初の位置で停止します。今いる場所は黄色の矢印で示されています。ここで、
今いる位置は、矢印のある行の「直前で止まっている」ことに注意してください。文字数を数える行の前な
ので、文字の入力は完成していることになります。では①入力した文字は変数 str_Input に正常に確認され
ているでしょうか。それはカーソルを str_Input の上に移動するとわかります。VC では変数の上にカーソ
ルを移動するとその値を読むことができます。ここでは”abc”となっているので読み込みは正常であることが
分かりました。参考のため nNum の上にカーソルを移動してください。本来の3ではなく「ごみの値」が表
示されているはずです。まだ実行していないので正常です。なお値は画面下にある「ローカル」ウインドウ
にも自動的に変数が表示されます。
また VC ではデバッグ中にはデバッグ用のツールバーが現れます。
各アイコンは以下の動作をします。
はデバッグの中止
はデバッグを中止して最初からデバッグをやり直す「再起動」
は「ステップイン」で、1行ごとに実行します。対象行が関数でもそのまま実行します。
は「ステップオーバ」で、1行ごと実行します。対象行が関数の場合は、その関数の中に入ります。
は「ステップアウト」で、今実行している関数の最後まで実行し、呼び出し関数に戻ります。
は現在位置から継続実行します(次のブレークポイントまで実行できます)。
それでは処理を続けましょう。次は②文字数が正常動作しているかの判定ですので「続行」をクリックし
てください。そうすると for 分の前(nNum 代入した直後)で停止します。ここで nNum の値が3となり正
常に処理できていることを確認します。
では次は③反転の並び替えは正常かを判断するため、さらに「続行」をクリックします。
反転後の変数 str_Reversed をみると「cba」ではなく「cb フ」となり、反転処理が正常動作していないこと
が分かりました。悪いのはこの処理なので、反転処理を詳細に見ていきましょう。①の箇所は正常なのでブ
レークポイントを外します。外すのは「●」をクリックするだけです。反転処理を見るので②の箇所のブレ
ークポイント以下はそのままにしておきます。
デバッグアイコンの再起動またはメニューのデバッグから再起動を選択してデバッグをやり直します。入力
画面で再度「abc」を入力し for 文の前で止まります。
今度は1行ずつ実行して、何が悪いのか見極めていきます。このとき、変数の値を「ローカル」で見るの
もいいのですが、個別にユーザが指定して変数を見ることができます。そのため「ローカル」タブではなく
「ウォッチ1」を選択し、変数名を入力するか、ソースコードから選択してドラッグします。ここでは i、j、
nNum、str_Input、strReversed を「ウォッチ1」に入れてチェックしましょう。なおウォッチウインドウ
では実行中の変数を無理やりユーザが変更することも可能です。
今は for 文を実行前なので正常なのは str_Input、nNum のみです。
では具体的に「ステップオーバ」アイコンをクリックし1行実行します。
for 文の前処理が実行されたので、i、j の値が設定されました。ウォッチウインドウではデータが変化すると
赤字で表示されます。続けて代入を行うため「ステップオーバ」をクリックします。
値を見ると str_Input[0]に‘c’が入っていることが分かります。変数の横の三角をクリックすると各要素
を見ることができます。もう一度三角をクリックして元に戻します。
それでは続けましょう。
「ステップオーバ」をクリックします。
正常に i、j が更新されています。
「ステップオーバ」で続けます。
代入も正常です。
「ステップオーバ」続けましょう。
正常に i、j が更新されています。次は3回目の文字交換です。「ステップオーバ」続けましょう。
あれ!既に for 文を抜けてしまっています。3回目の入れ替えが行われていません。よく見ると、前回の
ステップオーバの時点で for 文を抜けてしまっています。つまり for 文が1回飛ばしていることが分かりま
した。つまり for 文の終了条件がおかしいことになります。これらの結果から、for の判定で本来 j が ZERO
になったら終了すべきところを1の時点で終了していたことが分かります。つまり j==0 でも入れ替えを行
う必要があったのです。
そこで「デバッグの中止」アイコンをクリックしてデバッグを中止します。そしてソースコードを修正し
ます。
再度「ビルド」して「デバッグの開始」を行います。「再起動」でもかまいません。
for 文を実行する前で止まっています。変数が正常であることをウォッチウインドウで確認します。今度は
結果を見るため、ステップではなく「続行」をクリックします。
今度は「cba」と並び替えられているのが確認できました。反転処理はこれで OK です。次の NULL の代入
が正常か「ステップオーバ」で続けましょう。
正常に文字列として認識されたことが分かります。これで OK です。最後の表示を確認するため「ステッ
プオーバ」で続けましょう。変数名では OK なので、実行結果を見ます。アプリケーション画面を見るには
画面下のタスクバーのアプリアイコンをクリックします。そうすると以下の画面が表示され、処理が正常に
行われたことがわかります。
「続行」デバッグを終了します。
「デバッグの終了」でも構いません。
このようにデバッグにより、確実に、そして効率よくバグを見つけることができます。
なおブレークポイントの設定では、単純に行を指定するだけでなく
・変数の値が変化した際に停止する
・変数の値が設定した値になると停止する
・指定行が設定した回数実行されると停止する
・判定条件が指定した条件になると停止する
などさまざまな条件で設定が可能です。
7.4 エディタの基本機能
(1)2画面表示
ファイルを切り替えて見たい場合には「タブファイル」を使い切り替えます。
タブ
複数のファイルを上下に並べてファイルを表示したい場合は「ウインドウ」「水平タブグループの新規作成」を選択します。
左右の場合は「ウインドウ」「垂直タブグループの新規作成」を選択します。
二つのファイルをひとつの画面で見るこ
とができます.
このタブを上のタブに移動すると画面が
移ります.どちらかが無くなるとひとつの
画面になります.
(2)分割ウインドウ
ひとつのファイルで別の箇所を見たり、編集したいとき、ひとつの画面で複数箇所見ることができます。
「ウインドウ」「分割」を選択すると現在アクティブなファイルが分割されます。
ひとつの画面に戻すにはセパレータを最
上部までドラッグします.
(3)文字の挿入
文字を挿入するには挿入位置にマウスカーソルをクリックまたは矢印キー移動してください。
(4)文字の削除
文字を削除するには削除したい文字を選択し[BackSpace]キーを押してください。あるいは、消したい部分の最後にカー
ソルを移動し[BackSpace]を押してください。
(5)Undo/Redo
やりなおし(Undo)、元に戻す(Redo)は「編集」「やり直し」または「元に戻す」を選択します。ツールバーからも実行可能で
す。
(6)選択
単語の選択:
単語の一部にカーソルを持って行き、マウスでダブルクリックする。マウスのドラッグでも選択可能。
領域の選択:
領域の最初にカーソルを持って行き、[Shift]キーを押して選択の最後の部分をクリックする。マウスのドラッグでも選択
可能
行全体の選択:
このあたりにカーソルを持って行き,カーソルが変わったらク
行の前部をクリック
リック
複数行の選択:
最初の行を選択した後、下にドラッグする。
(7)選択領域の削除
領域を選択し[Delete]キーを押す。
(8)選択領域の移動
領域を選択しマウスでドラック。
(9)選択領域のコピー
領域を選択し、[Ctrl]を押しながらドラッグ。
(10)検索
[Ctrl]+F で検索ダイアログを出す。検索したい文字列を入力する。
(11)置換
プログラムの中の文字を置き換える。
[Ctrl]+F で検索ダイアログを出す。その後「置換」タブを押して置換ダイアログを出し、置換したい文字列を入力する。
(12)ブックマーク
プログラムにマークを付け、必要に応じてその位置にジャンプする。
ブックマークを付けたい行のどこかをクリックした後、「編集」「ブックマーク」のあとの各メニューを選ぶ
・ブックマークを付ける
・ブックマークにジャンプする
・ブックマークを削除する
・全てのブックマークを削除する
ブックマーク
ブックマークが作成されると行の頭にブックマークが付く。なお、ツールバーからもコントロールできる。
メニューの「表示」「ツールバー」「テキストエディタ」から開くことができる。
(13)コメント
複数行を選んでから「編集」「詳細」「選択範囲のコメント」でコメントする。
コメントを解除する場合は「編集」「詳細」「選択範囲のコメント解除」でコメントを解除する。
(14)アウトライン
複雑なプログラムを折りたたみます。行の先頭にある記号をクリックすることで閉じたり開いたりできます。
ここをクリック