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になりました。

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