C++ でコマンドラインアプリを作る

(1/1)
今回は、Windowsのコマンドライン(DOS窓)で動くアプリとして、「PHPで閏年かどうか判定する」で作ったPHPプログラムを移植する。アルゴリズムについてはPHPプログラムの方をご覧いただきたい。

サンプル・プログラム

プロジェクトの準備

C++でコマンドラインアプリを作る
Eclipseでは、個々のアプリケーションをプロジェクトという単位で管理する。1つのプロジェクトに対して1つのフォルダが割り当てられる。
そこでまず、新しいプロジェクトを作成する。上図のように、「メニュー→ファイル→新規→プロジェクト」を選ぶ。
C++でコマンドラインアプリを作る
すると、プロジェクトの種類を選ぶダイアログが開くので、「C/C++→C++プロジェクト」を選ぶ。
C++でコマンドラインアプリを作る
プロジェクトの名前は isleap1 として、ロケーションに適切なフォルダを指定する。
プロジェクト・タイプは「実行可能→空のプロジェクト」、ツールチェーンとして「MinGW GCC」を選ぶ。
C++でコマンドラインアプリを作る
空のプロジェクトが作成された。
続いて「メニュー→ファイル→新規→ソース・ファイル」を選び、C++ソース・ファイルを作成する。先ほど指定したフォルダ \isleap1 と、ソース・ファイル isleap1.cpp を指定する。
C++でコマンドラインアプリを作る
左ペインに空の "isleap1.cpp" が現れるので、これを選択し、中央ペインにダウンロードした "isleap1.cpp" の内容をコピー&ペーストするか、ファイルをそのままロケーションにコピーする。

   1: /** isleap1.cpp
   2:  * 閏年かどうか判定する(コマンドライン版)
   3:  *
   4:  * @copyright   (c)studio pahoo
   5:  * @author      パパぱふぅ
   6:  * @動作環境    MinGW
   7:  * @参考URL     http://www.pahoo.org/e-soul/webtech/cpp01/cpp01-01-02.shtm
   8: */
   9: // 初期値 ============================================================
  10: #include <iostream>
  11: #include <ctime>
  12: using namespace std;
  13: 
  14: // サブ・プログラム ==================================================
  15: /**
  16:  * 与えられた年が閏年かどうか判定する
  17:  * @param   int  y   西暦年
  18:  * @return  bool true:閏年である/false:平年である
  19: */
  20: bool isleap(int y) {
  21:     bool ret = false;
  22:     if (y % 4 == 0)     ret = true;
  23:     if (y % 100 == 0)   ret = false;
  24:     if (y % 400 == 0)   ret = true;
  25:     return ret;
  26: }
  27: 
  28: // メインプログラム ==================================================
  29: int main(void) {
  30:     time_t t = time(0);                 //現在時刻
  31:     tm* now = localtime(&t);            //ローカルタイム
  32:     int year = now->tm_year + 1900;     //西暦年を取り出す
  33:     bool res = isleap(year);            //閏年かどうか判定する
  34: 
  35:     cout << year << "年は 閏年" << (res ? "です." : "ではありません."<< endl;
  36:     return 0;
  37: }

プロジェクトのビルドと実行

C++でコマンドラインアプリを作る
①実行ボタンをクリックすると、ビルドとプログラムの実行が始まり、下方のコンソールに「XXXX年は閏年です/ではありません」と表示すれば成功である。
C++でコマンドラインアプリを作る
ロケーションフォルダに "\Debug\isleap1.exe" という実行型プログラムが生成されている。
コマンドラインを開き、実行すると、上図のようなエラーパネルが表示されるはずだ。これは、MinGW GCC が実行時に必要とするライブラリDLLが見つからないことを意味している。\system32 フォルダへDLLをコピーすれば解決するが、それだと、このプログラムを配布するためにインストーラーを用意するなどして、あらかじめDLLをコピーする処理を加えなければならない。
そこで、実行型プログラムにDLLを埋め込むオプションを指定することにする。
C++でコマンドラインアプリを作る
isleap1 プロジェクトを右クリックしてプロパティを選択。「C/C++ビルド→設定→MinGW GCC++ Linker→その他」を選び、リンカー・フラグに "-static -lstdc++" を入力し、適用する。
これにより、ビルド時に標準ライブラリDLLを埋め込むことができる。
C++でコマンドラインアプリを作る
再びビルドを実行し、コマインドラインから "\Debug\isleap1.exe" を実行すると、今度は結果が表示されただろう。

参考サイト

(この項おわり)
header