Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

プロトタイプが必要な場合

WndProc関数の前にFunc関数を書いているから、WndProc関数の ソースがコンパイルされる時はFunc関数は既に読み込み済みで Func関数のプロトタイプは必要無いと思ったんだけど、必要なんですか? #include <windows.h> int Func(HWND); ←これは必要ですか? LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpstr, int n) {  … } int Func(HWND hWnd) {  … } LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {  static int i;  switch(uMsg){  case WM_CREATE:   i = Func(hWnd);   break;  … }

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

関数の定義は、宣言を兼ねますから、質問にあるソースでは必要ありません。 もちろん、ひとつのファイルに存在すれば、ということですが。 これは、C でも C++ でも同じです。

A__
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • s2t
  • ベストアンサー率79% (47/59)
回答No.3

C++の場合はプロトタイプ宣言は必須というのは初耳ですが、関数の定義が使用される位置よりも前に記述されていれば、CでもC++でもプロトタイプ宣言は省略できます。 どの位置に宣言されていても省略できるというわけではないので注意してください。 質問にあるソースでは、Func()より前に記述している関数で利用していないのでFunc()のプロトタイプ宣言を省略できます。 WndProc()がFunc()よりも前に記述されている場合は、プロトタイプ宣言が必要になります。 もしも、Func()がこのファイル内でしか用いられない関数であればstaticを付けておいた方がいいかもしれません。デフォルトではexternになっていたと記憶しています。

A__
質問者

お礼

ありがとうございます。 違う意見が出たから閉じずに待っていました。 このソースならプロトタイプ宣言は省略できるんですね。 関数にstaticとかexternとかを付けるとどうなるのかについて 知らなかったから勉強しようと思いました。

すると、全ての回答が全文表示されます。
  • sha-girl
  • ベストアンサー率52% (429/815)
回答No.1

Cの場合は省力可能でしたが C++の場合はプロトタイプ宣言は 必須です。

A__
質問者

お礼

ありがとうございます。

すると、全ての回答が全文表示されます。

関連するQ&A