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

  |   2015/09/09 ( 2019/01/05 ) | 2,053 views
 0

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;
}

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

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

それでは、See you next!

この記事をシェアする
Chronoir.netのRSSフィードを購読する

ニア(Nia)

サーバー・フロント・DB・インフラ(クラウド)エンジニア。主にC#/PHP(最近はTypeScriptも)を使っています。最近はDockerやWebアプリ、UWPやモバイルアプリ開発(Xamarin)、ブロックチェーン等を探求中。好物は紅茶とコーヒー、シラス丼、趣味は写真撮影と音ゲーです

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください