Visual Studio 2015で作成したC++プロジェクトにて、端折られているmain関数のコマンドライン引数を復活させる

Nia-TN-SDF-A2

こんにちはー!ニアです。

Visual Studioで用意されているプロジェクトウィザードから、C++コンソールアプリケーションのプロジェクトを作成した時にできるソースファイルですが、2013以前と2015ではmain関数の構成が異なっています

1. コマンドライン引数がない・・・だと・・・

Visual Studio 2013以前では、以下のようなソースファイルが作成されます。

※追加のオプションは「プリコンパイル済みヘッダー」と「Security Development Lifecycle (SDL) チェック」をオンにしています。

// ConsoleApplication12.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}

ところが、Visual Studio 2015では、main関数の名が「_tmain」(mainまたはwmainのマクロ)から「main」になり、コマンドライン引数が省略されています。

// ConsoleApplication14.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"


int main()
{
    return 0;
}
Nia-TN-SDfs-sweet.png
どうしてこうなった・・・

2. プロジェクトテンプレートを改造してみよう

もちろん、main関数の仮引数に追加すればコマンドライン引数を使用することができますが、

int main( int argc, char* argv[] )

プロジェクトを新規作成する度に入力するのは煩わしいので、プロジェクトテンプレートを改造してしまいましょう。

改造するファイルは「Microsoft Visual Studio 14.0\VC\VCWizards\AppWiz\Generic\Application\templates\1041」にある「root.cpp」です。

※root.cppが管理者権限のフォルダーの中にある場合、一旦別の場所にコピーしてそれを編集し、元のファイルを上書きします。

注:念のため、改造する前にバックアップをとることを推奨します。

[!if DLL_APP]
// [!output PROJECT_NAME].cpp : DLL アプリケーション用にエクスポートされる関数を定義します。
[!endif]
[!if WIN_APP]
// [!output PROJECT_NAME].cpp : アプリケーションのエントリ ポイントを定義します。
[!endif]
[!if CONSOLE_APP]
// [!output PROJECT_NAME].cpp : コンソール アプリケーションのエントリ ポイントを定義します。
[!endif]
//

#include "stdafx.h"

...

[!if CONSOLE_APP]

int main()
{
    return 0;
}

[!endif]
[!endif]

[!if CONSOLE_APP]」のところにあるmain関数に、コマンドライン引数を追加します。

[!if CONSOLE_APP]

int main(int argc, char* argv[])
{
    return 0;
}

[!endif]

もし、Visual Studio 2013以前のようなmain関数の構成にしたい場合、以下のようにします。

[!if CONSOLE_APP]

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

[!endif]

これで、プロジェクトウィザードからC++コンソールアプリのプロジェクトを作成した時に、main関数にコマンドライン引数が入った状態で始めることができます。

cpp2015main2

決して、「プロジェクト作成後のソースコードに細工する」というイカサマはしてませんよ(笑)

[END]

コメント

タイトルとURLをコピーしました