VisualStudioの基本的な使い方の解説です.
まだインストールが済んでいなければ,[[Texts/ProgrammingEnv]]を読んでVisualStudioを読んでおいてください.
C言語の基礎もあったほうがよいです.

* hello, world [#n3c82576]

まずはVisualStudioを使ってhello, worldを書いてみましょう.

とりあえず,VisualStudioを起動.で,メニューからプロジェクトの新規作成を選びましょう
「新しいプロジェクト」というウィンドウが開いたら,プロジェクト名にhelloと入力して VisuallC++の空のプロジェクトを選択した状態でOKを押してください.
特に何もないウィンドウに変わりましたか?
次にウィンドウの左端に表示されている「ソースファイル」「ヘッダファイル」「リソースファイル」に注目してください.
「ソースファイル」を選んで,「右クリック」->「追加」->「新しい項目」を選んでください.
ファイル名にmain.cと入れて追加を押すと,エディタが表示されます.
VisualStudioではここにコードを入力します.
それでは,下のコードを貼り付けてください.

    #include <stdio.h>
    
    int main()
    {
        puts("hello, world!);
        return 0;
    }

F7キーを押すと,このコードをコンパイルすることができます.(それか,メニューから「ビルド」->「ソリューションのビルド」をクリックしてください)

    1>------ ビルド開始: プロジェクト: hello, 構成: Debug Win32 ------
    1>コンパイルしています...
    1>main.c
    1>c:\cppprojects\hello\main.c(5) : error C2001: 定数が 2 行目に続いています。
    1>c:\cppprojects\hello\main.c(6) : error C2143: 構文エラー : ')' が 'return' の前にありません。
    1>ビルドログは "file://c:\cppprojects\hello\Debug\BuildLog.htm" に保存されました。
    1>hello - エラー 2、警告 0
    ========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========

のように下の画面に表示されますね.エラー 2です.コンパイル失敗ですね.

    1>c:\cppprojects\hello\main.c(5) : error C2001: 定数が 2 行目に続いています。
    1>c:\cppprojects\hello\main.c(6) : error C2143: 構文エラー : ')' が 'return' の前にありません。

の行がエラーの場所と内容を表しています.エラーの内容は初心者にはなかなか読むのが大変ですが
頻繁にみるエラーは慣れちゃうので問題ありません.
「main.c(5)」とあるのは,main.cファイルの5行目でエラーがあったという意味です.
エラーの行数は初心者にも理解できる情報なので貴重です.
それでは,このmain.c(5)の辺りをダブルクリックしてみてください.
エディタにエラーの場所が表示されますね.
それでは,その行に注目してエラーを探してください.「定数が 2 行目に続いています。」というのをヒントにすると良いかもしれません.
問題点が分かったら修正してください.それではもう一度F7を押してコンパイルしてみましょう.

    1>------ ビルド開始: プロジェクト: hello, 構成: Debug Win32 ------
    1>コンパイルしています...
    1>main.c
    1>リンクしています...
    1>LINK : 前回のインクリメンタル リンクで C:\cppprojects\hello\Debug\hello.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。
    1>マニフェストを埋め込んでいます...
    1>ビルドログは "file://c:\cppprojects\hello\Debug\BuildLog.htm" に保存されました。
    1>hello - エラー 0、警告 0
    ========== ビルド: 1 正常終了、0 失敗、0 更新、0 スキップ ==========

最後にエラー 0と表示されれば成功です.
コンパイルに成功したら,Ctrl+F5を押して実行してみましょう.(それかメニューから「デバッグ」->「デバッグなしで開始」をクリックしてください)
hello, world!と表示されましたか?
これでVisualStudioを使ってプログラミングを楽しむことができるようになりました.
続いてデバッガの使い方です.

* デバッガ [#vf0245c0]

デバッガというのはデバッグを支援するツールのことです.デバッガを使うだけで開発がものすごく楽になるのでぜひ覚えておきましょう.*1
まずは,VisualStudioでdebugという名前のプロジェクトを作ってください.main.cをソースに追加するのも忘れずに
次に,以下のコードをコンパイルしてください

    #include <stdio.h>
    
    int main()
    {
        // 1から4まで数字を足すよ!
        int sum=0;
        int d;
        for(d=1; d<4; ++d)
            sum+=d;
        // 1+2+3+4を表示するよ! 当然10だね!
        printf("%d\n", sum);
        return 0;
    }

1〜4までの和を求めるプログラムのつもりです.さぁ実行してみましょう

    6
    続行するには何かキーを押してください . . .

1+2+3+4が6なわけ無いのでどこかにバグがあるようです.このバグをデバッガを使って見つけてみましょう.

** ブレークポイント [#r811ff8c]

プログラムのデバッグをしている時に一番必要な情報は,ある瞬間にある変数にどんな値が入っているかということですね.
printfを使って画面に色々な変数の値を表示した経験のある方も多いと思います.
色々な所にprintfを入れる作業はめんどくさいですが,似たようなことをデバッガを使えばもっと楽に行うことができます.
それでは,9行目の sum+=d;の所をクリックしたあとに,F9を押してください.
行の左に赤い丸が表示されましたか? これはブレークポイントというもので,プログラムの実行をここで一時的に止めることができます.
それでは,F5を押してデバッグを開始してください(それか,メニューから「デバッグ」->「デバッグ開始」をクリックしてください)
黄色い矢印が9行目に現れましたね.これはプログラムの実行がここで停止していることを表しています.
ウィンドウの下の方に注目してみましょう.自動変数というものがみえますか.
ここには今実行している行に関係する変数の値が表示されます.
変数dが1,変数sumが0だということが分かりますね.
次に,F10キーを押してください.sumの右の数字が赤くなって1に変わりましたね.
赤くなったのは状態が変化したことを表しています.
もう一度F10を押してみてください.今度はdが2になりましたね.
そのままどんどんF10を押していくとsumの値が増えていきますね.
ループを抜けて,printfの行にいくまでF10を押してみましょう.
printfの時点での変数の値はd=4, sum=6ですね.
途中の動作に何かおかしなところはありましたか? 何度もデバッグをして調べてみてください.
問題点に気付いたら修正して実行してみてください.10と表示されればOKです.

また,ブレークポイントで一時停止した状態でF5を押すと次のブレークポイントまで一気に実行することも出来ます.
一行づつ実行する必要がない場合は,そっちを使ったほうが便利でしょう.

それと,自動変数の隣に(たぶんある)ローカルというタブをクリックすると
ローカル変数を全て表示することができます.
ローカル変数というのは今いる関数内にある変数のことです.(ちょっと違うけど)

* 実行時エラー [#o80ee293]

まずは下のコードをコンパイルしてF5キーを押してデバッグしてみてください.

    #include <stdio.h>
    
    int div(int x, int y)
    {
        return x/y;
    }
    
    void printAdivB(int a, int b)
    {
        printf("%d\n", div(a, b));
    }
    
    int main()
    {
        printAdivB(1,0);
        return 0;
    }

なんか,エラーがでますね.
中断を押すと,エディタに例の黄色い矢印が現れます.ここでエラーが出たということです.
自動変数の項目には変数xが1,変数yが0であると表示されていますね.
つまり,1/0を行ったからエラーがでたということが分かります.
それでは下にあるタブから,呼び出し履歴というタブをクリックしてみましょう.
これはどういう順番で関数が呼ばれたかを表しています.黄色い矢印が今いる関数でその下の関数が,一つ前の関数です.
試しにひとつ下にある

    debug.exe!printAdivB(int a=1, int b=0)  行 10 + 0xd バイト

をダブルクリックしてみてください.エディタに緑の矢印が表示されましたね.
ここから,div関数をよんだことがわかります.(便利!)
また,その状態で自動変数をみてみると,変数aとbの状態をみることもできます.至れり尽くせりですね.

もっと大きなプログラムでSegmentation fault(セグメント違反)が起こったときなんかに,ソースコードから問題を探すのはとても大変ですが
デバッガを使うとこのように簡単に問題が発生した場所と経路を知ることができます.
total: 8186  / today: 1  / yesterday: 0  / now: 1

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS