質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

5回答

20997閲覧

visual studioでmainがないC++コードを実行してもうまくいくのはなんででしょうか?

grapefruit

総合スコア33

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2017/03/08 07:18

とても初歩的な質問になりますが、visual studio上でc++のプログラムの実行についてお聞きしたいです。
visual studio上で、main関数が書かれていない複数のcppファイルを実行する時、どの順番で、また、どの部分から実行が始まっているのでしょうか?

私の理解では、main関数が書かれている部分から実行が始まると思ってるのですが。

以下に私がサンプルコードとしてダウンロードしたプログラムの構造をお見せします。今回のコードではopenCvを使ってます。
イメージ説明

図のcamerviewerやcameraviewerDlg.cpp,stdafx.cppもmain関数は書かれていないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

MFCで実装されてるんでしょか。だったらmain(WinMain)はライブラリの中にあって、自動的にリンクされてます。

投稿2017/03/08 07:33

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grapefruit

2017/03/08 07:45

回答ありがとうございます! でもそうでしたら、どのような順番でプログラムが実行されるのでしょうか?
episteme

2017/03/08 07:59

MFC/Dialogアプリみたいですね。 だとすると CameraViewer.cpp に CCameraViewerApp theApp; があるはず。 CCameraViewerApp は CWinApp から導出され、 main(WinMain)から巡り巡って CWinApp::Initinstance() を再定義した CCameraViewerApp::InitInstance() に到達します。
grapefruit

2017/03/09 06:29

とてもわかりやすい回答ありがとうございます! 参考になりました!
guest

0

こんにちは。

WindowsのGUI開発環境のエントリーポイントはWinMain()関数だったと思います。
GUI開発用フレームワーク(例えばMFC)を使う場合、そのフレームワーク側でWinMain()関数を定義している場合もあります。

このどちらかに該当しているのではないでしょうか?

GUI開発環境にmain()が無いのは規格違反な気もしますが、内部的にはこっそりあるのかも知れません。また、仮になくても特に問題はないように思います。

投稿2017/03/08 07:39

編集2017/03/08 07:40
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grapefruit

2017/03/08 07:44

回答ありがとうございます! こっそりmainで実行してるってことですね、でしたら、その中でどのような順番で自分のコードを実行しているのかってわかりますか?
Chironian

2017/03/08 07:50

WinMainはないですか? あればそれが最初です。 ない場合は、何かのGUI開発フレームワークをお使いでしょうから、そのフレームワーク次第です。 ファイル名からMFCっぽいですが、すいません。私はMFCについては詳しくないので分かりません。
guest

0

皆の回答を参考して、またMFCについて色々調べてところ、
https://code.msdn.microsoft.com/windowsdesktop/VisualC-43c71460
上述のサイトに、MFCアプリケーションについて詳しく書いてあったので、
参考になると思います。

投稿2017/03/09 06:31

grapefruit

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Visual Studio で確認する方法

1)CameraViewer.cpp の InitInstance() 内の適当な位置にブレークポイントを置いて実行
2)「デバッグ」-「ウィンドウ」-「呼び出し履歴」(Alt+7)ウィンドウを開く
3)履歴を辿って WinMain を見つける

ご参考まで

投稿2017/03/08 08:17

編集2017/03/09 05:27
takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

WindowsアプリのエントリーポイントはWinMain()関数です。
ただし、MFCなどのGUIライブラリを使っている場合は、クラスでラップされている場合が多いため、WinMainは隠されています。
なので、慣れないうちはちょっと座り心地が悪い感じがすると思います。

メインのクラスは、MFCならCWinAppクラスを継承しているはずです。このクラスを継承することで、決まりきった処理が隠れたところで実行されるようになります。

投稿2017/03/08 07:52

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問