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" の内容をコピー&ペーストするか、ファイルをそのままロケーションにコピーする。

0001: /** isleap1.cpp
0002:  * 閏年かどうか判定する(コマンドライン版)
0003:  *
0004:  * @copyright (c)studio pahoo
0005:  * @author     パパぱふぅ
0006:  * @動作環境 MinGW
0007:  * @参考URL     http://www.pahoo.org/e-soul/webtech/cpp01/cpp01-01-02.shtm
0008: */
0009: // 初期値 ============================================================
0010: #include <iostream>
0011: #include <ctime>
0012: using namespace std;
0013: 
0014: // サブ・プログラム ==================================================
0015: /**
0016:  * 与えられた年が閏年かどうか判定する
0017:  * @param int  y   西暦年
0018:  * @return bool true:閏年である/false:平年である
0019: */
0020: bool isleap(int y) {
0021:     bool ret = false;
0022:     if (y % 4 == 0)     ret = true;
0023:     if (y % 100 == 0)   ret = false;
0024:     if (y % 400 == 0)   ret = true;
0025:     return ret;
0026: }
0027: 
0028: // メインプログラム ==================================================
0029: int main(void) {
0030:     time_t t = time(0);                  //現在時刻
0031:     tmnow = localtime(&t);         //ローカルタイム
0032:     int year = now->tm_year + 1900;        //西暦年を取り出す
0033:     bool res = isleap(year);         //閏年かどうか判定する
0034: 
0035:     cout << year << "年は 閏年" << (res ? "です." : "ではありません.") << endl;
0036:     return 0;
0037: }

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

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