C++ レガシープログラミング Vol. 4

前回のプログラムに少し改造を加えます。

f:id:msec:20220222194313p:plain

コード6

先ず、コンソールから1行の文字列を読み込む関数、gets_s を追加します。この関数は引数に、読み込んだ文字列を格納するバッファを指すポインタ変数と読み込む文字列のサイズを指定します。バッファは char buf[21]; で21バイトの char 配列を宣言しています。C++の文字列は ’¥0’ で表わされるヌル文字を末尾に持つので必要な文字サイズ+1のバッファが必要です。gets_s は1行読み込みなので、コンソールで何か文字列を打って、最後にエンターキーを押すと関数の実行が終わります。

f:id:msec:20220222195125p:plain

コード7

次のコードは、先ほどの gets_s を無限ループ内に入れて、何行も続けて読み込むようにしたものです。コンソールで文字列入力してエンターを押すと gets_s 関数の呼び出しが終わって、buf に文字列が読み込まれます。次の行で printf でバッファの中身をコンソールに書き出します。前半の main 関数の引数の値を書き出す部分はもう必要ないので、削除しました。while(1) は繰り返し命令で、() 内が false ( =0 )になるで繰り返すという命令ですが、(1) だと永遠に false にならないので、無限に繰り返されるループです。そのままだと、強制終了するしかなくなるので、strcmp を使って文字列が "end" と一致したらループを抜けるようにしています。

main 関数の最初に準備をして(ここでは バッファ char buf[21] を作って)無限ループに入り、終了条件に一致したらループを抜けて main 関数が終わるというのがPCアプリの最も基本的なスタイルです。

では、Visual Studio のテンプレートを使って、画面のあるアプリを作って仕組みを見てみましょう。

Visual Studio を起動しなおして、新しいプロジェクトの作成を指定します

f:id:msec:20220222200355p:plain

プロジェクト2


 今度は Windows デスクトップウィザードを選びます

f:id:msec:20220222200534p:plain

ウイザード

作成を押します

f:id:msec:20220222200634p:plain

作成

アプリケーションの種類で「デスクトップアプリケーション(.exe)」を指定します

f:id:msec:20220222200809p:plain

アプリ

OKを押すと以下のようなコードが生成されます

f:id:msec:20220222200855p:plain

コード7

実行すると以下のようなウィンドウが表示されます

f:id:msec:20220222200942p:plain

実行2

次回、このソースを少し説明して、アプリの作成に取り掛かります

C++ レガシープログラミング Vol. 3

 

前回作成したプログラムのソースコードを見ていきます。

以下のような画面になっていると思います。

f:id:msec:20220213173513p:plain

コード1

C/C++ で // で始まる行はコメント行なので、ビルドして出来る .exe には含まれません。何を書いても影響ない行です。

ちなみに、上のソースコードからコメント行を削除すると以下のようになります。

f:id:msec:20220213174043p:plain

コード2

int main() { } がメイン関数で、exe を起動したときに最初に呼ばれます。引数を渡すことができますが、ここでは省略されています。

std::cout << "Hello World!¥n"  が唯一の実装部分で、コンソールに "Hello World!¥n" を書き出しています。個人的には iostream は嫌いなので、printf に直すと以下のようになります。

f:id:msec:20220213174832p:plain

コード3

実行結果は修正前と同じです。プログラミングは暗記科目ではないので、いろいろな関数を覚えれば良いというものでは無いと思います。

最近はデザインパターンとか、新しい言語とかを覚えたがる人が多いですが、私は沢山の事を覚えるより少ない知識を使いつくす方が好きなので、昔からある関数を好みます。

 

続いて、main 関数に引数追加します。main 関数の引数は int argc と char* argv[] の2つという約束になっています。以下のコードは main 関数の第二引数 argv 配列の最初の要素をコンソールに書き出します。C/C++ の配列は必ず 0 から始まります。

f:id:msec:20220213175630p:plain

コード4

▶ボタンを押してデバッグ実行すると、以下のような画面になります

f:id:msec:20220213180551p:plain

実行1

argv[0] には C:\Develop\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe という文字列が入っている事が分かります。

もうちょっと改造します。

f:id:msec:20220213182437p:plain

コード5

main 関数の最初は、printf("%d\n", argc) で argc の値を書き出します。 argc は整数なので、printf の第一引数の書式指定は "%d\n" にしています。%d が整数値を文字列にします。そのあとに付けた \n は改行コードです。argc の値を出力した直後に改行します。

出力は、1 で次の行は前回と同じ、C:\Develop\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe です。Windows のプログラムの main 関数の引数は、argc に引数の数が入って、argv にその数分の文字列の配列が渡されますが、argv の最初には必ずそのプログラムの exe 名がフルパスで渡されます。

では、exe に追加の引数を渡してみます。

Visual Studio のメニューから「ConsoleApplication1のプロパティ」を選びます

f:id:msec:20220213182547p:plain

メニュー1

ダイアログが出たら、左のツリーで「デバッグ」を選んで、右の「コマンド引数」の欄に abc def と入れます。 abc と def の間には半角スペースを入れます。コマンド引数はスペース区切りなので、2つの引数を指定したことになります。

f:id:msec:20220213182705p:plain

プロパティ

実行すると、以下のようになるでしょう。

f:id:msec:20220213183003p:plain

出力

指定した、abc と def が出力されています。argc の値は 3になりました。

次回は、コンソールからの入力とループを書いていきます。









 

C++レガシープログラミング Vol.2

 前回のプログラミングの続きです。

Visual Studio で生成されたファイルを見ていきましょう。

先ず、前回プロジェクトを新規作成するときに、C:¥Develop のフォルダに作成したので、この場所に何が生成されたか見てみましょう

f:id:msec:20220205213215p:plain

C:¥

C:¥Develop フォルダをダブルクリックして開きます

f:id:msec:20220205213310p:plain

プロジェクトフォルダ

プロジェクト名ConsoleApplication1というフォルダがあるので、開いてみます

f:id:msec:20220205213434p:plain

プロジェクトファイル

ConsoleApplication1.vcxproj  というファイルがプロジェクトファイルです。(テキストファイルなのでメモ帳などで開けますが、壊れると困るので今は開かないでください。

x64 というフォルダを開いてください

f:id:msec:20220205213658p:plain

Debug

Debugというフォルダがあるので、開いてください

f:id:msec:20220205213739p:plain

実行ファイル

ConsoleApplication1.exe というファイルが、前回作成したプログラムの実行ファイルです。ダブルクリックすると、実行できますがコマンドプロンプトが一瞬表示されてすぐに終わってしまいます。そういうプログラムなので気にしないでください。

 

次回は、ソースコードを見ていきます

 

C++レガシープログラミング

プログラミングは、小学校でも習うようになるとか言われていますが、なんちゃってプログラミングになってしまうのではないかと心配しています。

昔ながらの(レガシーな)プログラミングについて書いてみようと思います。

プログラミングといえば最初に習うのは Hello World というのは古い話かもしれませんが、とりあえずそこから始めるのがよいと思うので、Windows パソコンを持っていたらタダで始められる Visual Studio を使って Hello World を作りましょう。

Windows, Visual StudioMicrosoft 社の登録商標です。(だったと思う)

 

ここから、開発環境のインストールの話なので、既に Visual Studio をインストール済みの方は読み飛ばしてください。

Visual Studio は個人利用は無料なので、Visual Studio というキーワードで検索してください。以下のような検索結果がでたら Visual Studio の Web サイトに行きます。

f:id:msec:20220126093114p:plain

検索

f:id:msec:20220126093433p:plain

Webサイト

Visual Studio の Web サイトに Visual Studio のダウンロードというボタンがあるので Community 2022 を選びます。Community が無償版で、Professional と Enterprise は有料版=業務用です。現在は 2022 というバージョンが最新で、昨年までは 2019 というバージョンでした。

f:id:msec:20220126093958p:plain

インストーラ

ダウンロードされるのは、インストーラインストーラみたいな小さなファイルです。上の絵のようなファイルがダウンロードされたら、ダブルクリックして実行します。

f:id:msec:20220126094130p:plain

インストールオプション

暫くすると、上の画面のようにどのモジュールをインストールするか選択する画面になります。

f:id:msec:20220126094305p:plain

C++

私のブログではC++を使うので、「C++によるデスクトップ開発」を選びます。他の機能も必要なら後で追加できるので、ここではこの項目だけ選んで右下の「インストール」ボタンを押します。「インストール」ボタンの上にインストールされるファイルのサイズが出ているので(ここでは 8.37GB)Cドライブの空きが足りない方は別の場所にインストールしてください。

f:id:msec:20220126094732p:plain

インストール中

インストールが始まると上のような画面で進捗状況が表示されます。PCの性能によっては1時間くらいかかる場合があります。

インストールが終わったら、一度PCを再起動してから Visual Studio を起動します。

f:id:msec:20220126094909p:plain

起動

再起動したら、Windows のスタートメニューから Visual Studio 2022 を選んで起動しましょう。初回起動時は少し時間がかかります。下記のようなサインイン画面が出たらとりあえず、「後で行う」をクリックして先に進みます。

f:id:msec:20220126095636p:plain

ログイン

初回起動時はスタイルを選ぶ画面が出ます。ここでは「Visual C++」配色は「システム設定」にしておきます。

f:id:msec:20220126095750p:plain

スタイル

f:id:msec:20220126100002p:plain

プロジェクト選択

プロジェクトを選択する画面が表示されます。すでに開発中のプロジェクトがあれば最近使ったプロジェクトが表示されますが、今回は右下の「コードなしで続行」を選びます。

以下の画面が出たら、とりあえず開発環境のインストールは終わりです。

f:id:msec:20220126100300p:plain

GUI

Visual Studio の起動が確認できたら、一か所だけ設定を変えておきます。

メニューの[ツール] -> [オプション]を選んで、設定画面を開きます。

f:id:msec:20220129182925p:plain

自動更新

f:id:msec:20220129183109p:plain

自動更新2

左の項目で [環境]を選ぶと、下の方に[製品の更新プログラム]という項目があるので、選んでください。右の画面で□更新プログラムを自動的にダウンロードするにチェックがついていると、PCの起動中の不特定のタイミングで Visual Studio が更新プログラムをダウンロードしにいくのでPCをプログラミング以外にも使っている人はチェックを外しておいた方が良いと思います。いつでも変更できるのでお好みでどうぞ。

ここから、最初のプログラムを作って実行するまでの手順を説明します。

メニューの[ファイル]->[新規作成]から[プロジェクト...] を選びます。プロジェクトは1つのプログラムを作るためのソース一式を束ねるものです。

f:id:msec:20220129183734p:plain

新規プロジェクト

プロジェクトテンプレートを選ぶ画面が表示されたら、右のリストから「コンソールアプリ」を選んで右下の[次へ]ボタンを押します。

f:id:msec:20220129184050p:plain

プロジェクトの種類

次へを押すと、プロジェクト名などを設定する画面になります。

f:id:msec:20220130200705p:plain

プロジェクト名

場所のところにソースコードやプロジェクトファイルを保存する場所を指定します。このブログでは、Cドライブ直下に Develop というフォルダを作ってそこに作ったプログラムを保存していきます。

プロジェクト名は、デフォルトで実行ファイル名になるので、わかりやすい名前を付けた方がいいですが、今回はとりあえずそのままにします。□ソリューションとプロジェクトを同じディレクトリに配置する にチェックを入れておきます。複数のモジュールで構成される大規模なプログラムを作る場合は、チェックしない方が良いです。

作成ボタンを押すと、ConsoleApplication1.cppというソースコードが生成されます。実際はプロジェクトファイルやソリューションファイルも生成されていますが、後で見ましょう。

f:id:msec:20220130201431p:plain

生成

今回はこのままビルドして実行してみます。

メニューから[ビルド]->[ソリューションのビルド]を選ぶと、ビルドが開始されます。

f:id:msec:20220130201709p:plain

ビルド

ビルドが成功すると、右下の[出力]画面に[ビルド:1 正常終了]が表示されます。

f:id:msec:20220130201923p:plain

ビルド

メニューの下のツールバーにある緑の三角[ローカルWindowsデバッガー]を押すと、ビルドしたプログラムがデバッグモードで実行されます。

f:id:msec:20220130202152p:plain

実行

[Microsoft Visual Studio デバッグコンソール]に Hello World! が表示されればOKです。

次回から、ソースコードを書いていきます。